- size_t datalen = strlen(data);
-
- // in Pango >= 1.16 the "underline of leading/trailing spaces" bug
- // has been fixed and thus the hack implemented below should never be used
- static bool pangoOk = !wx_pango_version_check(1, 16, 0);
-
- bool needshack = underlined && !pangoOk;
-
- if (needshack)
- {
- // a PangoLayout which has leading/trailing spaces with underlined font
- // is not correctly drawn by this pango version: Pango won't underline the spaces.
- // This can be a problem; e.g. wxHTML rendering of underlined text relies on
- // this behaviour. To workaround this problem, we use a special hack here
- // suggested by pango maintainer Behdad Esfahbod: we prepend and append two
- // empty space characters and give them a dummy colour attribute.
- // This will force Pango to underline the leading/trailing spaces, too.
-
- wxCharBuffer data_tmp(datalen + 6);
- // copy the leading U+200C ZERO WIDTH NON-JOINER encoded in UTF8 format
- memcpy(data_tmp.data(), "\342\200\214", 3);
- // copy the user string
- memcpy(data_tmp.data() + 3, data, datalen);
- // copy the trailing U+200C ZERO WIDTH NON-JOINER encoded in UTF8 format
- memcpy(data_tmp.data() + 3 + datalen, "\342\200\214", 3);
-
- data = data_tmp;
- datalen += 6;
- }