public inbox for cygwin@cygwin.com
 help / color / mirror / Atom feed
From: Corinna Vinschen <corinna-cygwin@cygwin.com>
To: cygwin@cygwin.com
Subject: Re: Cygwin fails to utilize Unicode replacement character
Date: Mon, 03 Sep 2018 21:03:00 -0000	[thread overview]
Message-ID: <20180903210258.GC6350@calimero.vinschen.de> (raw)
In-Reply-To: <1575af94-78b3-681a-7dc1-0932969ac3e4@towo.net>

[-- Attachment #1: Type: text/plain, Size: 3519 bytes --]

On Sep  3 22:42, Thomas Wolff wrote:
> Am 03.09.2018 um 22:27 schrieb Corinna Vinschen:
> > On Sep  3 21:14, Corinna Vinschen wrote:
> > > On Sep  3 20:20, Thomas Wolff wrote:
> > > > Am 03.09.2018 um 19:56 schrieb Thomas Wolff:
> > > > > Am 03.09.2018 um 19:16 schrieb Corinna Vinschen:
> > > > > > On Sep  3 18:34, Thomas Wolff wrote:
> > > > > > > Am 03.09.2018 um 16:59 schrieb Corinna Vinschen:
> > > > > > > > Does anybody have an idea what I'm doing wrong?
> > > > > > > This works in mintty, just uploaded a patch. Maybe somehow the
> > > > > > > GetConsole
> > > > > > > "dc" does not support this usage?
> > > > > > ¯\_(ツ)_/¯
> > > > > Dito; hold on, sorry, your code does *not* work inside mintty.
> > > > > Mine looks a bit different and I thought to have manually verified it's
> > > > > functionally equivalent, but indeed there must be something fishy...
> > > > You still need to
> > > >    SelectObject(cdc, f);
> > > > where f is the HFONT of the font you want to check.
> > > > To compare, you may check out function win_check_glyphs in file wintext.c in
> > > > mintty.
> > > Thanks but I don't know how to get a HFONT for the current console font.
> > > 
> > > In the meantime I figured out why my GetCurrentConsoleFontEx call
> > > failed with error 87:
> > > 
> > > When looking again I realized there's a member called cbSize.  The MSDN
> > > docs neglect to tell that the cbSize member has to be primed with
> > > sizeof(CONSOLE_FONT_INFOEX).  As soon as I tried that, the function
> > > succeeded.
> > > 
> > > Well, it's a start.  I now have the actual font name.  No idea how to
> > > get a HFONT from there, though.  From what I can tell ATM, I'd have to
> > > call CreateFont to get a new HFONT and then destroy it again after
> > > usage.  This looks pretty wasteful.
> > Well, it still doesn't work for me.  I now have the following code:
> > 
> > ===================== SNIP ======================
> > [...]
> > ===================== SNAP ======================
> > 
> > Supposedly none of the fonts support 0xfffd:
> > 
> >    $ gcc -g -o cons cons.c -lgdi32
> >    $ ./cons
> >    font Consolas
> >    gi = 65535 879
> >    rp_idx = 1
> >    $ ./cons
> >    font Lucida Console
> >    gi = 65535 620
> >    rp_idx = 1
> >    $ ./cons
> >    font Courier New
> >    gi = 65535 372
> >    rp_idx = 1
> > 
> > So I'm still doing something wrong, apparently.  Any hint?
> Test with a font that has the glyph; those 3 don't. Try DejaVu.

I can't. I only have a limited set of fonts available in the console.

But yes, you're right.

What I just did was calling the GetFontUnicodeRanges function
for each font, and it turns out that none of the fonts support
0xfffd "REPLACEMENT CHARACTER", but all three support 0xfffc
"OBJECT REPLACEMENT CHARACTER".  I expanded the testcase to check
for this with GetGlyphIndicesW and, lo and behold, the result
makes sense.

On the other hand, during testing I saw a 0xfffd character printed for
these fonts.  None of them actually supports 0xfffd, so apparently the
Windows console already uses replacement fonts if possible.

I guess I just stop here and always print 0xfffd.  I seriously doubt
it makes sense to add so much code just to print a single char in a
border case.


Thanks a lot for your help,
Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Maintainer                 cygwin AT cygwin DOT com
Red Hat

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  reply	other threads:[~2018-09-03 21:03 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-01 16:13 Steven Penny
2018-09-01 18:11 ` Thomas Wolff
2018-09-01 18:46   ` Steven Penny
2018-09-01 21:07     ` Thomas Wolff
2018-09-01 19:40 ` Corinna Vinschen
2018-09-01 21:50 ` Doug Henderson
2018-09-01 22:49   ` Steven Penny
2018-09-02  8:07     ` Thomas Wolff
2018-09-02 12:51       ` Steven Penny
2018-09-03 12:46         ` Corinna Vinschen
2018-09-03 14:59           ` Corinna Vinschen
2018-09-03 16:34             ` Thomas Wolff
2018-09-03 17:17               ` Corinna Vinschen
2018-09-03 17:56                 ` Thomas Wolff
2018-09-03 18:20                   ` Thomas Wolff
2018-09-03 19:14                     ` Corinna Vinschen
2018-09-03 20:27                       ` Corinna Vinschen
2018-09-03 20:42                         ` Thomas Wolff
2018-09-03 21:03                           ` Corinna Vinschen [this message]
2018-09-03 22:15                             ` Steven Penny
2018-09-04  6:06                               ` Brian Inglis
2018-09-04  9:00                               ` Corinna Vinschen
2018-09-04 11:40                                 ` Steven Penny
2018-09-05  7:55                                   ` Corinna Vinschen
2018-09-05  9:22                                     ` Thomas Wolff
2018-09-05 11:58                                     ` Steven Penny
2018-09-05 13:18                                       ` Marco Atzeri
2018-09-05 15:20                                         ` Andrey Repin
2018-09-05 15:58                                         ` Corinna Vinschen
2018-09-05 20:15                                           ` Corinna Vinschen
2018-09-06  1:35                                             ` Steven Penny
2018-09-06  7:01                                               ` Corinna Vinschen
2018-09-07  8:20                                                 ` Corinna Vinschen
2018-09-07 10:34                                                   ` Thomas Wolff
2018-09-07 11:29                                                     ` Corinna Vinschen
2018-09-07 11:42                                                       ` Thomas Wolff
2018-09-07 11:51                                                         ` Thomas Wolff
2018-09-07 11:54                                                           ` Corinna Vinschen
2018-09-07 16:22                                                             ` Brian Inglis
2018-09-07 16:48                                                             ` Brian Inglis
2018-09-07 17:01                                                               ` Marco Atzeri
2018-09-07 18:21                                                                 ` Corinna Vinschen
2018-09-07 18:20                                                               ` Corinna Vinschen
2018-09-05 13:35                                       ` Andrey Repin
2018-09-05 14:04                                         ` Houder
2018-09-05 15:05                                           ` Andrey Repin
2018-09-04 12:50                                 ` David Macek
2018-09-04 14:18                                   ` Thomas Wolff
2018-09-04 14:46                                     ` David Macek
2018-09-04 18:20                                     ` Steven Penny
2018-09-04 18:41                                       ` Thomas Wolff
2018-09-04 19:50                                         ` Andrey Repin
2018-09-04 19:53                                         ` Steven Penny
2018-09-04 21:43                                           ` Thomas Wolff
2018-09-04 23:29                                             ` Steven Penny
2018-09-04 20:40                                       ` Brian Inglis
2018-09-05  8:32                                         ` Corinna Vinschen
2018-09-04 13:05                                 ` Andrey Repin
2018-10-04  0:25                               ` Steven Penny
2018-09-03 16:05         ` Brian Inglis
2018-09-04 19:59 ` Doug Henderson
2018-09-04 21:05   ` Steven Penny

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180903210258.GC6350@calimero.vinschen.de \
    --to=corinna-cygwin@cygwin.com \
    --cc=cygwin@cygwin.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).