Guys, Given my age (71 years) and academic and work background, I won't be able to keep pace with you.
I had one of my sons install PSPP 1.4.1 in his notebook that run under Windows 10. We ran the same set of data I furnished John earlier. To my pleasant surprise, the ghost special character did not appear! I uninstalled the PSPP in my notebook, an old DELL running under Windows 7. I installed an older PSPP version as indicated below: pspp-20181109-setup GNU pspp 1.2.0-g0fb4db which I downloaded from https://www.tonyknowles.com/pspp-statistics/ I tested it with same set of data. The ghost special character is nowhere to be found. I am very proud to have met the two of you. Your kind of guys form part of my "classroom" examples of unselfish professionals who share their knowledge and skill to others. I will not speculate on the current problem. Some of my students are submitting PSPP outputs with that special character attached to numbers with ABS(value) < than 1. Thank you very much and I am praying that the said "bug" could be found and eventually be exorcised out of the PSPP system! On Saturday, April 17, 2021, 2:55:23 PM GMT+8, John Darrington <j...@darrington.wattle.id.au> wrote: Thanks Ben, Looking at this, I'm inclined to think you're right. We're still however speculating about the cause. For most users this problem does not manifest itself, so I guess there is some particular combination of platform, operating system, (locale?), cairo version, which gives rise to it. So I think the onus is on the people who are actually experiencing the issue to demonstrate a reproducible set of conditions under which it occurs. When we can reproduce the problem, we have a chance of finding the cause and fixing it. J' On Fri, Apr 16, 2021 at 10:58:07AM -0700, Ben Pfaff wrote: I think it's more likely to be the following code in cairo-fsm.c that tries to avoid wordwrapping. I don't know why U+2060 WORD JOINER is showing up as U+0000 on Windows. I guess we could add #ifndef __WIN32__ and see if it goes away. if (decimal[0] && c_isdigit (decimal[1]) && (decimal == text || !c_isdigit (decimal[-1]))) { struct string tmp = DS_EMPTY_INITIALIZER; ds_extend (&tmp, ds_length (&body) + 16); markup_escape (&tmp, markup, text, decimal - text + 1); ds_put_unichar (&tmp, 0x2060 /* U+2060 WORD JOINER */); markup_escape (&tmp, markup, decimal + 1, -1); ds_swap (&tmp, &body); ds_destroy (&tmp); } On Fri, Apr 16, 2021 at 8:26 AM John Darrington <j...@darrington.wattle.id.au> wrote: > > After a fair bit of effort, I have been unable to reproduce this problem. > > So if this issue is to have any chance of getting fixed someone who is > experiencing it is going to need to give us a backtrace. > > Looking through the code, I consider the most likely function of interest > is output_decimal in src/data/data-out.c - in particular this bit of code > seems most relevant: > > if (decimals > 0) > { > *p++ = style->decimal; > p = mempcpy (p, &magnitude[integer_digits + 1], decimals); > } > > However I can't see anything actually wrong here. I suggest that you > put a breakpoint here conditional upon *p == 0 ... hopefully that might > provide something of interest. > > J'