Skip to content

Unicode character display (strangely wide or missing) #423

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
hackerb9 opened this issue Sep 28, 2021 · 16 comments · Fixed by #734
Closed

Unicode character display (strangely wide or missing) #423

hackerb9 opened this issue Sep 28, 2021 · 16 comments · Fixed by #734
Labels
blocker release-blocking action item bug Something isn't working fonts font rasterization and text shaping API and platform implementations VT: rasterizer Rendering of the terminal into a pixmap using `terminal_renderer` library
Milestone

Comments

@hackerb9
Copy link

Description

Contour displays some characters very strangely or not at all.

Environment

  • Contour Version or Git commit hash: 2814f42
  • Operating System (name / distribution / version): Debian GNU/Linux 11
  • Contour configuration: None
  • TERM environment variable: xterm-256color
  • Compiler version: g++ 10.2.1

Steps to Reproduce

  1. Run the fonttable script
  2. Notice that some of the characters are strangely large and most are missing.
    image
  3. Now run fonttable | less. Use the > key to go to the end of input.
  4. Notice that, although it should be identical, the glyphs now appear correct.
    image
@christianparpart
Copy link
Member

Lol, I love your scripts, man. Many thanks for these. I think I somehow should integrate some of these into some kind of CI tests :)

Well. The strangely sized glyphs are colored (most likely) bitmap glyphs. It is very well interesting to know which font and respective glyph index have caused this (you might need some assistance to find that out, not too urgent).

There was a name for the thing of spamming a system (e.g. TE) with every possible glyph. I have to look at the notcursses project that once had something similar too.

However, at least one problem is that the glyph cache is getting bigger and bigger on the master branch. Which causes it to get bloated (therefore slow when spamming glyphs). - I have that redesigned in the grid branch I am currently actively working on (say: 75% done).

I'll be focusing on your other report first and then head back here (hopefully all fixable also without that special grid branch) :)

@christianparpart christianparpart added blocker release-blocking action item bug Something isn't working fonts font rasterization and text shaping API and platform implementations VT: rasterizer Rendering of the terminal into a pixmap using `terminal_renderer` library labels Sep 29, 2021
@christianparpart christianparpart added this to the 0.2.x bugfix release milestone Sep 29, 2021
@christianparpart
Copy link
Member

@hackerb9 ah damn, I can't test on OS/X, because fonttable doesn't like it.

awk: calling undefined function strtonum
 input record number 34, file 
 source line number 1

Will be trying ASAP on Linux.

@hackerb9
Copy link
Author

hackerb9 commented Sep 30, 2021

Is GNU awk available in brew?

So, just for fun, I tried the same test in the improvements/grid branch with the XFT_DEBUG environment variable set to 3.

XFT_DEBUG=3 src/contour/contour
fonttable | less
>      # To go to the end of the buffer
bb    # To go back two pages

While many of the missing characters at the end now appear, [EDIT: I was mistaken. I had forgotten they do show up when piped into less]. the strangely wide characters are still there if I scroll back two pages. Also, XFT_DEBUG seemed to have no effect; I believe it should have printed out what fonts were getting chosen, but maybe that's just an XTerm thing.

@christianparpart
Copy link
Member

oh damn. I should have told you that I'm currently in v2-full-rework of the grid branch. So expect it to be broken. But I have the fundamentals done. Now I need to polish it (and improve missing unit test cases :D). This grid branch will most likely be coming for 0.3.0 then. I can ping you then :)

@christianparpart
Copy link
Member

the strangely wide characters are still there if I scroll back two pages

this isn't addressed in the grid branch. The grid branch is a full grid rewrite in order to "dramatically" improve performance (goal number one) along with code refactors for better reusability / cleanups.

the strange character thing you experience can very well go into the next bugfix release (0.2.1) as soon as i can repro it :)

@hackerb9
Copy link
Author

No problem, I went back to the main branch. I may have narrowed down the rogue characters.

image

It appears to be "NEGATIVE SQUARED LATIN CAPITAL LETTERS" A, B, O, and P. For some reason all other letters are missing, which seems weird for a font to do. (What can you even spell? "Poppa Baobab"? Oh, wait! Those are blood types.) Now to find out what font it is...

By the way, I tested that unicode range on XTerm and it worked fine, but it used a standard (non-colorful) font.

@hackerb9
Copy link
Author

hackerb9 commented Sep 30, 2021

I found the font that's triggering the strangely wide glyph bug.

$ fc-list :charset=1F170
/usr/share/fonts/truetype/ancient-scripts/Symbola_hint.ttf: Symbola:style=Regular
/usr/share/fonts/truetype/unifont/unifont_upper.ttf: Unifont Upper:style=Regular
/usr/share/fonts/truetype/noto/NotoColorEmoji.ttf: Noto Color Emoji:style=Regular
$ fc-list :charset=1F171
/usr/share/fonts/truetype/ancient-scripts/Symbola_hint.ttf: Symbola:style=Regular
/usr/share/fonts/truetype/unifont/unifont_upper.ttf: Unifont Upper:style=Regular
/usr/share/fonts/truetype/noto/NotoColorEmoji.ttf: Noto Color Emoji:style=Regular
$ fc-list :charset=1F172
/usr/share/fonts/truetype/ancient-scripts/Symbola_hint.ttf: Symbola:style=Regular
/usr/share/fonts/truetype/unifont/unifont_upper.ttf: Unifont Upper:style=Regular

NotoColorEmoji.ttf defines color characters for 🅰 and 🅱, but not 🅲, so that's our culprit.¹

But this also points out another bug. All the other NEGATIVE SQUARED letters were blank in Contour, even though my machine has the fonts needed to render them.


¹ Maybe I'm a weirdo, but I actually would prefer that letter like characters like these not be pre-rendered in color.

@christianparpart
Copy link
Member

image
That is how it looks like on my desktop (Gentoo Linux)

What I'd like you to do is something like this:

image

This will generate debug output to your current terminal's screen. you can pipe it into a text file or clipboard and then paste it here. (you may want to have a look at contour list-debug-tags output, if curious, you can also do contour debug font.'*' for more detailed info.

You can then paste that in here, most likely you want to wrap that spam though behind the <details> tag that Github supports :)

@christianparpart
Copy link
Member

christianparpart commented Sep 30, 2021

But this also points out another bug. All the other NEGATIVE SQUARED letters were blank in Contour, even though my machine has the fonts needed to render them.

That is most likely a fontconfig configuration problem (not necessarily on your side though). Maybe you really want to dump the logs with contour debug font.'*' then for a very detailed information.

Maybe I'm a weirdo, but I actually would prefer that letter like characters like these not be pre-rendered in color.

Users that wish that are adviced (AFAIK) to tweak fontconfig for that (on Linux).

Hm, I just checked. these colored glyphs you see are actually meant to be colored:

image

Any codepoint (grapheme cluster) who's indication is "emoji" (screenshot above) is supposed to be rendered in square block (colored or not)

EDIT: I still wonder why you are getting the uberly huge pictograms rendered. Maybe you want to email me your faulty NotoColorEmoji.ttf so that I can have a look at it and see how I can avoid such things (at least the ultra wide renderings)?

@hackerb9
Copy link
Author

hackerb9 commented Sep 30, 2021

Results from test.sh

[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+1f170
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+55 1:U+2b 2:U+31 3:U+46 4:U+31 5:U+37 6:U+30
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+4e 1:U+45 2:U+47 3:U+41 4:U+54 5:U+49 6:U+56 7:U+45
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+53 1:U+51 2:U+55 3:U+41 4:U+52 5:U+45 6:U+44
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+4c 1:U+41 2:U+54 3:U+49 4:U+4e
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+43 1:U+41 2:U+50 3:U+49 4:U+54 5:U+41 6:U+4c
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+4c 1:U+45 2:U+54 3:U+54 4:U+45 5:U+52
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+41
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+1f171
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+55 1:U+2b 2:U+31 3:U+46 4:U+31 5:U+37 6:U+31
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+42
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+1f172
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+55 1:U+2b 2:U+31 3:U+46 4:U+31 5:U+37 6:U+32
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+43
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+1f173
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+55 1:U+2b 2:U+31 3:U+46 4:U+31 5:U+37 6:U+33
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+44
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+1f174
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+55 1:U+2b 2:U+31 3:U+46 4:U+31 5:U+37 6:U+34
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+45
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+1f175
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+55 1:U+2b 2:U+31 3:U+46 4:U+31 5:U+37 6:U+35
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+46
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+1f176
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+55 1:U+2b 2:U+31 3:U+46 4:U+31 5:U+37 6:U+36
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+47
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+1f177
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+55 1:U+2b 2:U+31 3:U+46 4:U+31 5:U+37 6:U+37
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+48
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+1f178
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+55 1:U+2b 2:U+31 3:U+46 4:U+31 5:U+37 6:U+38
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+49
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+1f179
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+55 1:U+2b 2:U+31 3:U+46 4:U+31 5:U+37 6:U+39
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+4a
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+1f17a
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+55 1:U+2b 2:U+31 3:U+46 4:U+31 5:U+37 6:U+41
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+4b
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+1f17b
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+55 1:U+2b 2:U+31 3:U+46 4:U+31 5:U+37 6:U+42
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+4c
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+1f17c
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+55 1:U+2b 2:U+31 3:U+46 4:U+31 5:U+37 6:U+43
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+4d
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+1f17d
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+55 1:U+2b 2:U+31 3:U+46 4:U+31 5:U+37 6:U+44
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+4e
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+1f17e
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+55 1:U+2b 2:U+31 3:U+46 4:U+31 5:U+37 6:U+45
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+4f
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+1f17f
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+55 1:U+2b 2:U+31 3:U+46 4:U+31 5:U+37 6:U+46
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+50
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+1f180
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+55 1:U+2b 2:U+31 3:U+46 4:U+31 5:U+38 6:U+30
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+51
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+1f181
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+55 1:U+2b 2:U+31 3:U+46 4:U+31 5:U+38 6:U+31
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+52
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+1f182
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+55 1:U+2b 2:U+31 3:U+46 4:U+31 5:U+38 6:U+32
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+53
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+1f183
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+55 1:U+2b 2:U+31 3:U+46 4:U+31 5:U+38 6:U+33
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+54
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+1f184
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+55 1:U+2b 2:U+31 3:U+46 4:U+31 5:U+38 6:U+34
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+55
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+1f185
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+55 1:U+2b 2:U+31 3:U+46 4:U+31 5:U+38 6:U+35
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+56
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+1f186
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+55 1:U+2b 2:U+31 3:U+46 4:U+31 5:U+38 6:U+36
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+57
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+1f187
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+55 1:U+2b 2:U+31 3:U+46 4:U+31 5:U+38 6:U+37
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+58
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+1f188
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+55 1:U+2b 2:U+31 3:U+46 4:U+31 5:U+38 6:U+38
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+59
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+1f189
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+55 1:U+2b 2:U+31 3:U+46 4:U+31 5:U+38 6:U+39
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+5a
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+1f18a
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+55 1:U+2b 2:U+31 3:U+46 4:U+31 5:U+38 6:U+41
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+43 1:U+52 2:U+4f 3:U+53 4:U+53 5:U+45 6:U+44
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+1f18b
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+55 1:U+2b 2:U+31 3:U+46 4:U+31 5:U+38 6:U+42
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+49 1:U+43
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+1f18c
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+55 1:U+2b 2:U+31 3:U+46 4:U+31 5:U+38 6:U+43
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+50 1:U+41
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+1f18d
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+55 1:U+2b 2:U+31 3:U+46 4:U+31 5:U+38 6:U+44
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+53 1:U+41
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+1f18e
        Using font: key=4, path="/usr/share/fonts/truetype/noto/NotoColorEmoji.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+55 1:U+2b 2:U+31 3:U+46 4:U+31 5:U+38 6:U+45
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+41 1:U+42
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+1f18f
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+55 1:U+2b 2:U+31 3:U+46 4:U+31 5:U+38 6:U+46
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+57 1:U+43
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+1f190
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+55 1:U+2b 2:U+31 3:U+46 4:U+31 5:U+39 6:U+30
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+53 1:U+51 2:U+55 3:U+41 4:U+52 5:U+45
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+44 1:U+4a
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+1f191
        Using font: key=4, path="/usr/share/fonts/truetype/noto/NotoColorEmoji.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+55 1:U+2b 2:U+31 3:U+46 4:U+31 5:U+39 6:U+31
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+43 1:U+4c
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+1f192
        Using font: key=4, path="/usr/share/fonts/truetype/noto/NotoColorEmoji.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+55 1:U+2b 2:U+31 3:U+46 4:U+31 5:U+39 6:U+32
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+43 1:U+4f 2:U+4f 3:U+4c
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+1f193
        Using font: key=4, path="/usr/share/fonts/truetype/noto/NotoColorEmoji.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+55 1:U+2b 2:U+31 3:U+46 4:U+31 5:U+39 6:U+33
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+46 1:U+52 2:U+45 3:U+45
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+1f194
        Using font: key=4, path="/usr/share/fonts/truetype/noto/NotoColorEmoji.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+55 1:U+2b 2:U+31 3:U+46 4:U+31 5:U+39 6:U+34
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+49 1:U+44
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+1f195
        Using font: key=4, path="/usr/share/fonts/truetype/noto/NotoColorEmoji.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+55 1:U+2b 2:U+31 3:U+46 4:U+31 5:U+39 6:U+35
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+4e 1:U+45 2:U+57
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+1f196
        Using font: key=4, path="/usr/share/fonts/truetype/noto/NotoColorEmoji.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+55 1:U+2b 2:U+31 3:U+46 4:U+31 5:U+39 6:U+36
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+4e 1:U+47
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+1f197
        Using font: key=4, path="/usr/share/fonts/truetype/noto/NotoColorEmoji.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+55 1:U+2b 2:U+31 3:U+46 4:U+31 5:U+39 6:U+37
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+4f 1:U+4b
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+1f198
        Using font: key=4, path="/usr/share/fonts/truetype/noto/NotoColorEmoji.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+55 1:U+2b 2:U+31 3:U+46 4:U+31 5:U+39 6:U+38
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+53 1:U+4f 2:U+53
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+73 1:U+72 2:U+63 3:U+2f 4:U+63 5:U+6f 6:U+6e 7:U+74 8:U+6f 9:U+75 10:U+72 11:U+2f 12:U+74 13:U+65 14:U+73 15:U+74 16:U+2e 17:U+73 18:U+68 19:U+3a
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+33 1:U+3a
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+72 1:U+65 2:U+61 3:U+64 4:U+3a
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+61 1:U+72 2:U+67
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"
[font.textshaping:contour/src/text_shaper/open_shaper.cpp:767] Shaping codepoints: 0:U+63 1:U+6f 2:U+75 3:U+6e 4:U+74
        Using font: key=0, path="/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf"

@christianparpart
Copy link
Member

Looks like it's using VeraMono.ttf for all of the test codepoints.

@hackerb9
Copy link
Author

I am using the standard fonts-noto-color-emoji package from the current version of Debian GNU/Linux. It has not been modified. I have uploaded a copy here: https://git.io/JgnwD

$ apt-file search /usr/share/fonts/truetype/noto/NotoColorEmoji.ttf 
fonts-noto-color-emoji: /usr/share/fonts/truetype/noto/NotoColorEmoji.ttf
$ debsums fonts-noto-color-emoji 
/usr/share/doc/fonts-noto-color-emoji/changelog.Debian.gz                     OK
/usr/share/doc/fonts-noto-color-emoji/copyright                               OK
/usr/share/fonts/truetype/noto/NotoColorEmoji.ttf                             OK

@hackerb9
Copy link
Author

Looks like it's using VeraMono.ttf for all of the test codepoints.

Could it be that TextShaper is fibbing?

fc-list did not include Vera as one of the fonts that had a glyph at that codepoint, so it should just be blank if it used Vera.

@christianparpart
Copy link
Member

christianparpart commented Oct 3, 2021

Looks like it's using VeraMono.ttf for all of the test codepoints.

Could it be that TextShaper is fibbing?

fc-list did not include Vera as one of the fonts that had a glyph at that codepoint, so it should just be blank if it used Vera.

I first verify of the debug prints is 100% right and 0% lying before i can answer that.

My guess? I gave you the wrong debug tag to test with and Vera Mono is your primary configured font. What we want to see is the actual don't used in text shaping.

@hackerb9
Copy link
Author

hackerb9 commented Oct 9, 2021

Any guesses what the right debug tag would be? Were you able to reproduce it using the font I uploaded?

I tried using debug renderer.text and got this output which seems to be indicating the font rendering size:

[renderer.text:contour/src/terminal_renderer/Renderer.cpp:107] Using font locator: fontconfig.
[renderer.text:contour/src/terminal_renderer/Renderer.cpp:139] Using OpenShaper text shaping engine.
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: DZ (presentation: text/Text) (U+01F1)
with metrics: (435+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 10x11+(0, 11), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 435: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 10x11+(0, 11), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 435: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 10x11+(0, 11), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U+01F1 (presentation: text/Text) (U+0055 U+002B U+0030 U+0031 U+0046 U+0031)
with metrics: (56+0+0|9+0) (14+0+0|9+0) (19+0+0|9+0) (20+0+0|9+0) (41+0+0|9+0) (20+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 56: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 56: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 9x7+(0, 8), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 14: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 9x7+(0, 8), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 14: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 9x7+(0, 8), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 19: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 19: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 20: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 20: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 41: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 41: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: LATIN (presentation: text/Text) (U+004C U+0041 U+0054 U+0049 U+004E)
with metrics: (47+0+0|9+0) (36+0+0|9+0) (55+0+0|9+0) (44+0+0|9+0) (49+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 47: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 47: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 10x12+(0, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 36: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 10x12+(0, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 36: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 10x12+(0, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 10x12+(0, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 55: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 10x12+(0, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 55: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 10x12+(0, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 44: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 44: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 49: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 49: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: CAPITAL (presentation: text/Text) (U+0043 U+0041 U+0050 U+0049 U+0054 U+0041 U+004C)
with metrics: (38+0+0|9+0) (36+0+0|9+0) (51+0+0|9+0) (44+0+0|9+0) (55+0+0|9+0) (36+0+0|9+0) (47+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 38: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 38: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 51: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 51: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: LETTER (presentation: text/Text) (U+004C U+0045 U+0054 U+0054 U+0045 U+0052)
with metrics: (47+0+0|9+0) (40+0+0|9+0) (55+0+0|9+0) (55+0+0|9+0) (40+0+0|9+0) (53+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 40: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 40: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 9x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 53: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 9x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 53: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 9x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: DZ (presentation: text/Text) (U+0044 U+005A)
with metrics: (39+0+0|9+0) (61+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 39: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 39: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 9x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 61: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 9x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 61: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 9x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: 🅰 (presentation: text/Text) (U+1F170)
with metrics: (190+0+0|135+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 136x128+(0, 101), 2)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 190: text; ratio:1; yOverflow(-86, -23); rasterized_glyph(0, 136x128+(0, 101), 2)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:318] Cropping 86 overflowing bitmap rows.
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:327] Cropping 23 underflowing bitmap rows.
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (colorAtlas) insert glyph 190: text; ratio:1; yOverflow(-86, -23); rasterized_glyph(0, 136x19+(0, 15), 2)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U+1F170 (presentation: text/Text) (U+0055 U+002B U+0031 U+0046 U+0031 U+0037 U+0030)
with metrics: (56+0+0|9+0) (14+0+0|9+0) (20+0+0|9+0) (41+0+0|9+0) (20+0+0|9+0) (26+0+0|9+0) (19+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 26: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 26: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: NEGATIVE (presentation: text/Text) (U+004E U+0045 U+0047 U+0041 U+0054 U+0049 U+0056 U+0045)
with metrics: (49+0+0|9+0) (40+0+0|9+0) (42+0+0|9+0) (36+0+0|9+0) (55+0+0|9+0) (44+0+0|9+0) (57+0+0|9+0) (40+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 9x12+(0, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 42: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 9x12+(0, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 42: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 9x12+(0, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 10x12+(0, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 57: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 10x12+(0, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 57: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 10x12+(0, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: SQUARED (presentation: text/Text) (U+0053 U+0051 U+0055 U+0041 U+0052 U+0045 U+0044)
with metrics: (54+0+0|9+0) (52+0+0|9+0) (56+0+0|9+0) (36+0+0|9+0) (53+0+0|9+0) (40+0+0|9+0) (39+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 54: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 54: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 9x14+(0, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 52: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 9x14+(0, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 52: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 9x14+(0, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: A (presentation: text/Text) (U+0041)
with metrics: (36+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: 🅱 (presentation: text/Text) (U+1F171)
with metrics: (191+0+0|135+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 136x128+(0, 101), 2)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 191: text; ratio:1; yOverflow(-86, -23); rasterized_glyph(0, 136x128+(0, 101), 2)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:318] Cropping 86 overflowing bitmap rows.
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:327] Cropping 23 underflowing bitmap rows.
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (colorAtlas) insert glyph 191: text; ratio:1; yOverflow(-86, -23); rasterized_glyph(0, 136x19+(0, 15), 2)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U+1F171 (presentation: text/Text) (U+0055 U+002B U+0031 U+0046 U+0031 U+0037 U+0031)
with metrics: (56+0+0|9+0) (14+0+0|9+0) (20+0+0|9+0) (41+0+0|9+0) (20+0+0|9+0) (26+0+0|9+0) (20+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: B (presentation: text/Text) (U+0042)
with metrics: (37+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 37: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 37: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: 🅲 (presentation: text/Text) (U+1F172)
with metrics: (0+0+0|135+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 0x0+(0, 0), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 0: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 0x0+(0, 0), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 0: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 0x0+(0, 0), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U+1F172 (presentation: text/Text) (U+0055 U+002B U+0031 U+0046 U+0031 U+0037 U+0032)
with metrics: (56+0+0|9+0) (14+0+0|9+0) (20+0+0|9+0) (41+0+0|9+0) (20+0+0|9+0) (26+0+0|9+0) (21+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 21: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 21: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: C (presentation: text/Text) (U+0043)
with metrics: (38+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: 🅳 (presentation: text/Text) (U+1F173)
with metrics: (0+0+0|135+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U+1F173 (presentation: text/Text) (U+0055 U+002B U+0031 U+0046 U+0031 U+0037 U+0033)
with metrics: (56+0+0|9+0) (14+0+0|9+0) (20+0+0|9+0) (41+0+0|9+0) (20+0+0|9+0) (26+0+0|9+0) (22+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 22: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 22: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: D (presentation: text/Text) (U+0044)
with metrics: (39+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: 🅴 (presentation: text/Text) (U+1F174)
with metrics: (0+0+0|135+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U+1F174 (presentation: text/Text) (U+0055 U+002B U+0031 U+0046 U+0031 U+0037 U+0034)
with metrics: (56+0+0|9+0) (14+0+0|9+0) (20+0+0|9+0) (41+0+0|9+0) (20+0+0|9+0) (26+0+0|9+0) (23+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 9x12+(0, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 23: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 9x12+(0, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 23: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 9x12+(0, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: E (presentation: text/Text) (U+0045)
with metrics: (40+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: 🅵 (presentation: text/Text) (U+1F175)
with metrics: (0+0+0|135+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U+1F175 (presentation: text/Text) (U+0055 U+002B U+0031 U+0046 U+0031 U+0037 U+0035)
with metrics: (56+0+0|9+0) (14+0+0|9+0) (20+0+0|9+0) (41+0+0|9+0) (20+0+0|9+0) (26+0+0|9+0) (24+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 24: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 24: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: F (presentation: text/Text) (U+0046)
with metrics: (41+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: 🅶 (presentation: text/Text) (U+1F176)
with metrics: (0+0+0|135+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U+1F176 (presentation: text/Text) (U+0055 U+002B U+0031 U+0046 U+0031 U+0037 U+0036)
with metrics: (56+0+0|9+0) (14+0+0|9+0) (20+0+0|9+0) (41+0+0|9+0) (20+0+0|9+0) (26+0+0|9+0) (25+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 25: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 25: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: G (presentation: text/Text) (U+0047)
with metrics: (42+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: 🅷 (presentation: text/Text) (U+1F177)
with metrics: (0+0+0|135+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U+1F177 (presentation: text/Text) (U+0055 U+002B U+0031 U+0046 U+0031 U+0037 U+0037)
with metrics: (56+0+0|9+0) (14+0+0|9+0) (20+0+0|9+0) (41+0+0|9+0) (20+0+0|9+0) (26+0+0|9+0) (26+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: H (presentation: text/Text) (U+0048)
with metrics: (43+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 43: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 43: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: 🅸 (presentation: text/Text) (U+1F178)
with metrics: (0+0+0|135+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U+1F178 (presentation: text/Text) (U+0055 U+002B U+0031 U+0046 U+0031 U+0037 U+0038)
with metrics: (56+0+0|9+0) (14+0+0|9+0) (20+0+0|9+0) (41+0+0|9+0) (20+0+0|9+0) (26+0+0|9+0) (27+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 27: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 27: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: I (presentation: text/Text) (U+0049)
with metrics: (44+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: 🅹 (presentation: text/Text) (U+1F179)
with metrics: (0+0+0|135+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U+1F179 (presentation: text/Text) (U+0055 U+002B U+0031 U+0046 U+0031 U+0037 U+0039)
with metrics: (56+0+0|9+0) (14+0+0|9+0) (20+0+0|9+0) (41+0+0|9+0) (20+0+0|9+0) (26+0+0|9+0) (28+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 28: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 28: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: J (presentation: text/Text) (U+004A)
with metrics: (45+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 8x12+(0, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 45: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(0, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 45: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(0, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: 🅺 (presentation: text/Text) (U+1F17A)
with metrics: (0+0+0|135+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U+1F17A (presentation: text/Text) (U+0055 U+002B U+0031 U+0046 U+0031 U+0037 U+0041)
with metrics: (56+0+0|9+0) (14+0+0|9+0) (20+0+0|9+0) (41+0+0|9+0) (20+0+0|9+0) (26+0+0|9+0) (36+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: K (presentation: text/Text) (U+004B)
with metrics: (46+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 9x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 46: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 9x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 46: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 9x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: 🅻 (presentation: text/Text) (U+1F17B)
with metrics: (0+0+0|135+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U+1F17B (presentation: text/Text) (U+0055 U+002B U+0031 U+0046 U+0031 U+0037 U+0042)
with metrics: (56+0+0|9+0) (14+0+0|9+0) (20+0+0|9+0) (41+0+0|9+0) (20+0+0|9+0) (26+0+0|9+0) (37+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: L (presentation: text/Text) (U+004C)
with metrics: (47+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: 🅼 (presentation: text/Text) (U+1F17C)
with metrics: (0+0+0|135+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U+1F17C (presentation: text/Text) (U+0055 U+002B U+0031 U+0046 U+0031 U+0037 U+0043)
with metrics: (56+0+0|9+0) (14+0+0|9+0) (20+0+0|9+0) (41+0+0|9+0) (20+0+0|9+0) (26+0+0|9+0) (38+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: M (presentation: text/Text) (U+004D)
with metrics: (48+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 9x12+(0, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 48: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 9x12+(0, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 48: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 9x12+(0, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: 🅽 (presentation: text/Text) (U+1F17D)
with metrics: (0+0+0|135+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U+1F17D (presentation: text/Text) (U+0055 U+002B U+0031 U+0046 U+0031 U+0037 U+0044)
with metrics: (56+0+0|9+0) (14+0+0|9+0) (20+0+0|9+0) (41+0+0|9+0) (20+0+0|9+0) (26+0+0|9+0) (39+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: N (presentation: text/Text) (U+004E)
with metrics: (49+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: 🅾 (presentation: text/Text) (U+1F17E)
with metrics: (192+0+0|135+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 136x128+(0, 101), 2)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 192: text; ratio:1; yOverflow(-86, -23); rasterized_glyph(0, 136x128+(0, 101), 2)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:318] Cropping 86 overflowing bitmap rows.
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:327] Cropping 23 underflowing bitmap rows.
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (colorAtlas) insert glyph 192: text; ratio:1; yOverflow(-86, -23); rasterized_glyph(0, 136x19+(0, 15), 2)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U+1F17E (presentation: text/Text) (U+0055 U+002B U+0031 U+0046 U+0031 U+0037 U+0045)
with metrics: (56+0+0|9+0) (14+0+0|9+0) (20+0+0|9+0) (41+0+0|9+0) (20+0+0|9+0) (26+0+0|9+0) (40+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: O (presentation: text/Text) (U+004F)
with metrics: (50+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 9x12+(0, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 50: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 9x12+(0, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 50: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 9x12+(0, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: 🅿 (presentation: text/Text) (U+1F17F)
with metrics: (193+0+0|135+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 136x128+(0, 101), 2)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 193: text; ratio:1; yOverflow(-86, -23); rasterized_glyph(0, 136x128+(0, 101), 2)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:318] Cropping 86 overflowing bitmap rows.
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:327] Cropping 23 underflowing bitmap rows.
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (colorAtlas) insert glyph 193: text; ratio:1; yOverflow(-86, -23); rasterized_glyph(0, 136x19+(0, 15), 2)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U+1F17F (presentation: text/Text) (U+0055 U+002B U+0031 U+0046 U+0031 U+0037 U+0046)
with metrics: (56+0+0|9+0) (14+0+0|9+0) (20+0+0|9+0) (41+0+0|9+0) (20+0+0|9+0) (26+0+0|9+0) (41+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: P (presentation: text/Text) (U+0050)
with metrics: (51+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: 🆀 (presentation: text/Text) (U+1F180)
with metrics: (0+0+0|135+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U+1F180 (presentation: text/Text) (U+0055 U+002B U+0031 U+0046 U+0031 U+0038 U+0030)
with metrics: (56+0+0|9+0) (14+0+0|9+0) (20+0+0|9+0) (41+0+0|9+0) (20+0+0|9+0) (27+0+0|9+0) (19+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: Q (presentation: text/Text) (U+0051)
with metrics: (52+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: 🆁 (presentation: text/Text) (U+1F181)
with metrics: (0+0+0|135+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U+1F181 (presentation: text/Text) (U+0055 U+002B U+0031 U+0046 U+0031 U+0038 U+0031)
with metrics: (56+0+0|9+0) (14+0+0|9+0) (20+0+0|9+0) (41+0+0|9+0) (20+0+0|9+0) (27+0+0|9+0) (20+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: R (presentation: text/Text) (U+0052)
with metrics: (53+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: 🆂 (presentation: text/Text) (U+1F182)
with metrics: (0+0+0|135+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U+1F182 (presentation: text/Text) (U+0055 U+002B U+0031 U+0046 U+0031 U+0038 U+0032)
with metrics: (56+0+0|9+0) (14+0+0|9+0) (20+0+0|9+0) (41+0+0|9+0) (20+0+0|9+0) (27+0+0|9+0) (21+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: S (presentation: text/Text) (U+0053)
with metrics: (54+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: 🆃 (presentation: text/Text) (U+1F183)
with metrics: (0+0+0|135+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U+1F183 (presentation: text/Text) (U+0055 U+002B U+0031 U+0046 U+0031 U+0038 U+0033)
with metrics: (56+0+0|9+0) (14+0+0|9+0) (20+0+0|9+0) (41+0+0|9+0) (20+0+0|9+0) (27+0+0|9+0) (22+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: T (presentation: text/Text) (U+0054)
with metrics: (55+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: 🆄 (presentation: text/Text) (U+1F184)
with metrics: (0+0+0|135+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U+1F184 (presentation: text/Text) (U+0055 U+002B U+0031 U+0046 U+0031 U+0038 U+0034)
with metrics: (56+0+0|9+0) (14+0+0|9+0) (20+0+0|9+0) (41+0+0|9+0) (20+0+0|9+0) (27+0+0|9+0) (23+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U (presentation: text/Text) (U+0055)
with metrics: (56+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: 🆅 (presentation: text/Text) (U+1F185)
with metrics: (0+0+0|135+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U+1F185 (presentation: text/Text) (U+0055 U+002B U+0031 U+0046 U+0031 U+0038 U+0035)
with metrics: (56+0+0|9+0) (14+0+0|9+0) (20+0+0|9+0) (41+0+0|9+0) (20+0+0|9+0) (27+0+0|9+0) (24+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: V (presentation: text/Text) (U+0056)
with metrics: (57+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: 🆆 (presentation: text/Text) (U+1F186)
with metrics: (0+0+0|135+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U+1F186 (presentation: text/Text) (U+0055 U+002B U+0031 U+0046 U+0031 U+0038 U+0036)
with metrics: (56+0+0|9+0) (14+0+0|9+0) (20+0+0|9+0) (41+0+0|9+0) (20+0+0|9+0) (27+0+0|9+0) (25+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: W (presentation: text/Text) (U+0057)
with metrics: (58+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 10x12+(0, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 58: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 10x12+(0, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 58: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 10x12+(0, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: 🆇 (presentation: text/Text) (U+1F187)
with metrics: (0+0+0|135+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U+1F187 (presentation: text/Text) (U+0055 U+002B U+0031 U+0046 U+0031 U+0038 U+0037)
with metrics: (56+0+0|9+0) (14+0+0|9+0) (20+0+0|9+0) (41+0+0|9+0) (20+0+0|9+0) (27+0+0|9+0) (26+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: X (presentation: text/Text) (U+0058)
with metrics: (59+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 10x12+(0, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 59: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 10x12+(0, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 59: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 10x12+(0, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: 🆈 (presentation: text/Text) (U+1F188)
with metrics: (0+0+0|135+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U+1F188 (presentation: text/Text) (U+0055 U+002B U+0031 U+0046 U+0031 U+0038 U+0038)
with metrics: (56+0+0|9+0) (14+0+0|9+0) (20+0+0|9+0) (41+0+0|9+0) (20+0+0|9+0) (27+0+0|9+0) (27+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: Y (presentation: text/Text) (U+0059)
with metrics: (60+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 10x12+(0, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 60: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 10x12+(0, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 60: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 10x12+(0, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: 🆉 (presentation: text/Text) (U+1F189)
with metrics: (0+0+0|135+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U+1F189 (presentation: text/Text) (U+0055 U+002B U+0031 U+0046 U+0031 U+0038 U+0039)
with metrics: (56+0+0|9+0) (14+0+0|9+0) (20+0+0|9+0) (41+0+0|9+0) (20+0+0|9+0) (27+0+0|9+0) (28+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: Z (presentation: text/Text) (U+005A)
with metrics: (61+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: 🆊 (presentation: text/Text) (U+1F18A)
with metrics: (0+0+0|135+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U+1F18A (presentation: text/Text) (U+0055 U+002B U+0031 U+0046 U+0031 U+0038 U+0041)
with metrics: (56+0+0|9+0) (14+0+0|9+0) (20+0+0|9+0) (41+0+0|9+0) (20+0+0|9+0) (27+0+0|9+0) (36+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: CROSSED (presentation: text/Text) (U+0043 U+0052 U+004F U+0053 U+0053 U+0045 U+0044)
with metrics: (38+0+0|9+0) (53+0+0|9+0) (50+0+0|9+0) (54+0+0|9+0) (54+0+0|9+0) (40+0+0|9+0) (39+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: 🆋 (presentation: text/Text) (U+1F18B)
with metrics: (0+0+0|135+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U+1F18B (presentation: text/Text) (U+0055 U+002B U+0031 U+0046 U+0031 U+0038 U+0042)
with metrics: (56+0+0|9+0) (14+0+0|9+0) (20+0+0|9+0) (41+0+0|9+0) (20+0+0|9+0) (27+0+0|9+0) (37+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: IC (presentation: text/Text) (U+0049 U+0043)
with metrics: (44+0+0|9+0) (38+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: 🆌 (presentation: text/Text) (U+1F18C)
with metrics: (0+0+0|135+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U+1F18C (presentation: text/Text) (U+0055 U+002B U+0031 U+0046 U+0031 U+0038 U+0043)
with metrics: (56+0+0|9+0) (14+0+0|9+0) (20+0+0|9+0) (41+0+0|9+0) (20+0+0|9+0) (27+0+0|9+0) (38+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: PA (presentation: text/Text) (U+0050 U+0041)
with metrics: (51+0+0|9+0) (36+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: 🆍 (presentation: text/Text) (U+1F18D)
with metrics: (0+0+0|135+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U+1F18D (presentation: text/Text) (U+0055 U+002B U+0031 U+0046 U+0031 U+0038 U+0044)
with metrics: (56+0+0|9+0) (14+0+0|9+0) (20+0+0|9+0) (41+0+0|9+0) (20+0+0|9+0) (27+0+0|9+0) (39+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: SA (presentation: text/Text) (U+0053 U+0041)
with metrics: (54+0+0|9+0) (36+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: 🆎 (presentation: emoji/Emoji) (U+1F18E)
with metrics: (194+0+0|135+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 136x128+(0, 101), 2)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 194: emoji; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 20x19+(0, 15), 2)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (colorAtlas) insert glyph 194: emoji; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 20x19+(0, 15), 2)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U+1F18E (presentation: text/Text) (U+0055 U+002B U+0031 U+0046 U+0031 U+0038 U+0045)
with metrics: (56+0+0|9+0) (14+0+0|9+0) (20+0+0|9+0) (41+0+0|9+0) (20+0+0|9+0) (27+0+0|9+0) (40+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: AB (presentation: text/Text) (U+0041 U+0042)
with metrics: (36+0+0|9+0) (37+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: 🆏 (presentation: text/Text) (U+1F18F)
with metrics: (0+0+0|135+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U+1F18F (presentation: text/Text) (U+0055 U+002B U+0031 U+0046 U+0031 U+0038 U+0046)
with metrics: (56+0+0|9+0) (14+0+0|9+0) (20+0+0|9+0) (41+0+0|9+0) (20+0+0|9+0) (27+0+0|9+0) (41+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: WC (presentation: text/Text) (U+0057 U+0043)
with metrics: (58+0+0|9+0) (38+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: 🆐 (presentation: text/Text) (U+1F190)
with metrics: (0+0+0|135+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U+1F190 (presentation: text/Text) (U+0055 U+002B U+0031 U+0046 U+0031 U+0039 U+0030)
with metrics: (56+0+0|9+0) (14+0+0|9+0) (20+0+0|9+0) (41+0+0|9+0) (20+0+0|9+0) (28+0+0|9+0) (19+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: SQUARE (presentation: text/Text) (U+0053 U+0051 U+0055 U+0041 U+0052 U+0045)
with metrics: (54+0+0|9+0) (52+0+0|9+0) (56+0+0|9+0) (36+0+0|9+0) (53+0+0|9+0) (40+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: DJ (presentation: text/Text) (U+0044 U+004A)
with metrics: (39+0+0|9+0) (45+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: 🆑 (presentation: emoji/Emoji) (U+1F191)
with metrics: (195+0+0|135+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 136x128+(0, 101), 2)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 195: emoji; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 20x19+(0, 15), 2)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (colorAtlas) insert glyph 195: emoji; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 20x19+(0, 15), 2)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U+1F191 (presentation: text/Text) (U+0055 U+002B U+0031 U+0046 U+0031 U+0039 U+0031)
with metrics: (56+0+0|9+0) (14+0+0|9+0) (20+0+0|9+0) (41+0+0|9+0) (20+0+0|9+0) (28+0+0|9+0) (20+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: CL (presentation: text/Text) (U+0043 U+004C)
with metrics: (38+0+0|9+0) (47+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: 🆒 (presentation: emoji/Emoji) (U+1F192)
with metrics: (196+0+0|135+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 136x128+(0, 101), 2)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 196: emoji; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 20x19+(0, 15), 2)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (colorAtlas) insert glyph 196: emoji; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 20x19+(0, 15), 2)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U+1F192 (presentation: text/Text) (U+0055 U+002B U+0031 U+0046 U+0031 U+0039 U+0032)
with metrics: (56+0+0|9+0) (14+0+0|9+0) (20+0+0|9+0) (41+0+0|9+0) (20+0+0|9+0) (28+0+0|9+0) (21+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: COOL (presentation: text/Text) (U+0043 U+004F U+004F U+004C)
with metrics: (38+0+0|9+0) (50+0+0|9+0) (50+0+0|9+0) (47+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: 🆓 (presentation: emoji/Emoji) (U+1F193)
with metrics: (197+0+0|135+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 136x128+(0, 101), 2)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 197: emoji; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 20x19+(0, 15), 2)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (colorAtlas) insert glyph 197: emoji; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 20x19+(0, 15), 2)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U+1F193 (presentation: text/Text) (U+0055 U+002B U+0031 U+0046 U+0031 U+0039 U+0033)
with metrics: (56+0+0|9+0) (14+0+0|9+0) (20+0+0|9+0) (41+0+0|9+0) (20+0+0|9+0) (28+0+0|9+0) (22+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: FREE (presentation: text/Text) (U+0046 U+0052 U+0045 U+0045)
with metrics: (41+0+0|9+0) (53+0+0|9+0) (40+0+0|9+0) (40+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: 🆔 (presentation: emoji/Emoji) (U+1F194)
with metrics: (198+0+0|135+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 136x128+(0, 101), 2)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 198: emoji; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 20x19+(0, 15), 2)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (colorAtlas) insert glyph 198: emoji; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 20x19+(0, 15), 2)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U+1F194 (presentation: text/Text) (U+0055 U+002B U+0031 U+0046 U+0031 U+0039 U+0034)
with metrics: (56+0+0|9+0) (14+0+0|9+0) (20+0+0|9+0) (41+0+0|9+0) (20+0+0|9+0) (28+0+0|9+0) (23+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: ID (presentation: text/Text) (U+0049 U+0044)
with metrics: (44+0+0|9+0) (39+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: 🆕 (presentation: emoji/Emoji) (U+1F195)
with metrics: (199+0+0|135+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 136x128+(0, 101), 2)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 199: emoji; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 20x19+(0, 15), 2)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (colorAtlas) insert glyph 199: emoji; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 20x19+(0, 15), 2)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U+1F195 (presentation: text/Text) (U+0055 U+002B U+0031 U+0046 U+0031 U+0039 U+0035)
with metrics: (56+0+0|9+0) (14+0+0|9+0) (20+0+0|9+0) (41+0+0|9+0) (20+0+0|9+0) (28+0+0|9+0) (24+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: NEW (presentation: text/Text) (U+004E U+0045 U+0057)
with metrics: (49+0+0|9+0) (40+0+0|9+0) (58+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: 🆖 (presentation: emoji/Emoji) (U+1F196)
with metrics: (200+0+0|135+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 136x128+(0, 101), 2)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 200: emoji; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 20x19+(0, 15), 2)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (colorAtlas) insert glyph 200: emoji; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 20x19+(0, 15), 2)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U+1F196 (presentation: text/Text) (U+0055 U+002B U+0031 U+0046 U+0031 U+0039 U+0036)
with metrics: (56+0+0|9+0) (14+0+0|9+0) (20+0+0|9+0) (41+0+0|9+0) (20+0+0|9+0) (28+0+0|9+0) (25+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: NG (presentation: text/Text) (U+004E U+0047)
with metrics: (49+0+0|9+0) (42+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: 🆗 (presentation: emoji/Emoji) (U+1F197)
with metrics: (201+0+0|135+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 136x128+(0, 101), 2)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 201: emoji; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 20x19+(0, 15), 2)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (colorAtlas) insert glyph 201: emoji; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 20x19+(0, 15), 2)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U+1F197 (presentation: text/Text) (U+0055 U+002B U+0031 U+0046 U+0031 U+0039 U+0037)
with metrics: (56+0+0|9+0) (14+0+0|9+0) (20+0+0|9+0) (41+0+0|9+0) (20+0+0|9+0) (28+0+0|9+0) (26+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: OK (presentation: text/Text) (U+004F U+004B)
with metrics: (50+0+0|9+0) (46+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: 🆘 (presentation: emoji/Emoji) (U+1F198)
with metrics: (202+0+0|135+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 136x128+(0, 101), 2)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 202: emoji; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 20x19+(0, 15), 2)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (colorAtlas) insert glyph 202: emoji; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 20x19+(0, 15), 2)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: U+1F198 (presentation: text/Text) (U+0055 U+002B U+0031 U+0046 U+0031 U+0039 U+0038)
with metrics: (56+0+0|9+0) (14+0+0|9+0) (20+0+0|9+0) (41+0+0|9+0) (20+0+0|9+0) (28+0+0|9+0) (27+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: SOS (presentation: text/Text) (U+0053 U+004F U+0053)
with metrics: (54+0+0|9+0) (50+0+0|9+0) (54+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: ./test.sh: (presentation: text/Text) (U+002E U+002F U+0074 U+0065 U+0073 U+0074 U+002E U+0073 U+0068 U+003A)
with metrics: (17+0+0|9+0) (18+0+0|9+0) (87+0+0|9+0) (72+0+0|9+0) (86+0+0|9+0) (87+0+0|9+0) (17+0+0|9+0) (86+0+0|9+0) (75+0+0|9+0) (29+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 3x2+(3, 2), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 17: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 3x2+(3, 2), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 17: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 3x2+(3, 2), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 9x13+(0, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 18: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 9x13+(0, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 18: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 9x13+(0, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 8x11+(1, 11), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 87: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x11+(1, 11), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 87: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x11+(1, 11), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 9x9+(0, 9), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 72: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 9x9+(0, 9), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 72: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 9x9+(0, 9), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 8x9+(1, 9), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 86: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x9+(1, 9), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 86: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x9+(1, 9), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 75: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 75: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 3x8+(3, 8), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 29: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 3x8+(3, 8), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 29: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 3x8+(3, 8), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: 4: (presentation: text/Text) (U+0034 U+003A)
with metrics: (23+0+0|9+0) (29+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: read: (presentation: text/Text) (U+0072 U+0065 U+0061 U+0064 U+003A)
with metrics: (85+0+0|9+0) (72+0+0|9+0) (68+0+0|9+0) (71+0+0|9+0) (29+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 8x9+(2, 9), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 85: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x9+(2, 9), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 85: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x9+(2, 9), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 8x9+(1, 9), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 68: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x9+(1, 9), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 68: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x9+(1, 9), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 9x12+(0, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 71: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 9x12+(0, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 71: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 9x12+(0, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: Illegal (presentation: text/Text) (U+0049 U+006C U+006C U+0065 U+0067 U+0061 U+006C)
with metrics: (44+0+0|9+0) (79+0+0|9+0) (79+0+0|9+0) (72+0+0|9+0) (74+0+0|9+0) (68+0+0|9+0) (79+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 79: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 79: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 9x12+(0, 9), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 74: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 9x12+(0, 9), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 74: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 9x12+(0, 9), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: option (presentation: text/Text) (U+006F U+0070 U+0074 U+0069 U+006F U+006E)
with metrics: (82+0+0|9+0) (83+0+0|9+0) (87+0+0|9+0) (76+0+0|9+0) (82+0+0|9+0) (81+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 8x9+(1, 9), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 82: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x9+(1, 9), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 82: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x9+(1, 9), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 8x12+(1, 9), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 83: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 9), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 83: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 9), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 76: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 76: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x12+(1, 12), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 8x9+(1, 9), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 81: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x9+(1, 9), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 81: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 8x9+(1, 9), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:505] Shaped codepoints: -t (presentation: text/Text) (U+002D U+0074)
with metrics: (16+0+0|9+0) (87+0+0|9+0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:228] Glyph metrics: rasterized_glyph(0, 5x1+(2, 5), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:290] insert glyph 16: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 5x1+(2, 5), 0)
[renderer.text:contour/src/terminal_renderer/TextRenderer.cpp:339] textureAtlas (monochromeAtlas) insert glyph 16: text; ratio:1; yOverflow(0, 0); rasterized_glyph(0, 5x1+(2, 5), 0)

As you can see, I added an extra line to your script so that it first shows a codepoint Contour renders correctly for comparison:

ugrep U+1F1
ugrep 1F170..98
sleep 5

I'm not exactly sure what the "metrics" numbers mean, but I'm seeing this:

Codepoint Character Metrics yOverflow Contour displays
U+1F1 DZ (435+0+0|9+0) (0, 0) correctly
U+1F170 🅰 (190+0+0|135+0) (-86, -23) as strangely wide
U+1F171 🅱 (190+0+0|135+0) (-86, -23) as strangely wide
U+1F172 🅲 (0+0+0|135+0) (0, 0) as missing
U+1F173 🅳 (0+0+0|135+0) (0, 0) as missing

A pattern or mere pareidolia?

@hackerb9
Copy link
Author

hackerb9 commented Oct 9, 2021

I also tried contour debug font.fallback and it didn't look as useful, but perhaps of note is that every time a "Shaping failed" error occurred, it was immediately preceded by Try NotoColorEmoji.ttf:

[font.fallback:contour/src/text_shaper/open_shaper.cpp:669] Try fallbacks font key:4, source: path /usr/share/fonts/truetype/noto/NotoColorEmoji.ttf
[font.fallback:contour/src/text_shaper/open_shaper.cpp:782] Shaping failed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
blocker release-blocking action item bug Something isn't working fonts font rasterization and text shaping API and platform implementations VT: rasterizer Rendering of the terminal into a pixmap using `terminal_renderer` library
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants