First letter lost possible cause: \grabbfferdata
Recently there have been reports of the first letter of a line of text being lost in the database and letter modules. I tracked down what appears to be the same problem and developed a work-around. The problem appears to be with the \grabbufferdata command. Something has changed in the way it works, and it now swallows the first token of the buffer that it grabs. It may also show up with other commands, but this is the only one I have found in my projects. If you have code with this command, a workaround is to insert \ignorespaces after it. I have no idea why this helps. If you do not have the code (if it is in somebody else's module), then using a blank line or dummy argument or \relax after the command that calls the code with \grabbufferdata may help. The following code shows the issues and these workarounds. % macros=mkvi \starttexdefinition unexpanded startNoIgnore \begingroup \dostartNoIgnore \stoptexdefinition \starttexdefinition dostartNoIgnore \grabbufferdata[Test][startNoIgnore][stopTest] \stoptexdefinition \starttexdefinition unexpanded startWithIgnore \begingroup \dostartWithIgnore \stoptexdefinition \starttexdefinition dostartWithIgnore \grabbufferdata[Test][startWithIgnore][stopTest] \ignorespaces \stoptexdefinition \starttexdefinition stopTest \getbufferdata[Test] \endgroup \stoptexdefinition \define\TestText {\qquad If you can read this the first token was not swallowed.} \starttext \subject{Test without \tex{ignorespaces}} First, the problem: \startNoIgnore\TestText\stopTest And the same with \type{{}} \startWithIgnore{}\TestText\stopTest Workaround with \tex{relax} \startNoIgnore\relax\TestText\stopTest Workaround with blank line \startNoIgnore \TestText\stopTest \subject{Test with \tex{ignorespaces}} This now works: \startWithIgnore\TestText\stopTest And the same with \type{{}} \startWithIgnore{}\TestText\stopTest And the same with \tex{relax} \startWithIgnore\relax\TestText\stopTest And the same with a blank line after the opening \startWithIgnore \TestText\stopTest \stoptext -- Rik Kabel
On 2014-06-25 15:51, Rik Kabel wrote:
Recently there have been reports of the first letter of a line of text being lost in the database and letter modules.
I tracked down what appears to be the same problem and developed a work-around.
The problem appears to be with the \grabbufferdata command. Something has changed in the way it works, and it now swallows the first token of the buffer that it grabs. It may also show up with other commands, but this is the only one I have found in my projects.
And as soon as I post, I see that Hans has found the problem in the buffering code. -- Rik Kabel
On 6/25/2014 10:03 PM, Rik Kabel wrote:
On 2014-06-25 15:51, Rik Kabel wrote:
Recently there have been reports of the first letter of a line of text being lost in the database and letter modules.
I tracked down what appears to be the same problem and developed a work-around.
The problem appears to be with the \grabbufferdata command. Something has changed in the way it works, and it now swallows the first token of the buffer that it grabs. It may also show up with other commands, but this is the only one I have found in my projects.
And as soon as I post, I see that Hans has found the problem in the buffering code.
but you're going to test it -) ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | voip: 087 875 68 74 | www.pragma-ade.com | www.pragma-pod.nl -----------------------------------------------------------------
On 6/25/2014 10:03 PM, Rik Kabel wrote:
On 2014-06-25 15:51, Rik Kabel wrote:
Recently there have been reports of the first letter of a line of text being lost in the database and letter modules.
I tracked down what appears to be the same problem and developed a work-around.
The problem appears to be with the \grabbufferdata command. Something has changed in the way it works, and it now swallows the first token of the buffer that it grabs. It may also show up with other commands, but this is the only one I have found in my projects.
And as soon as I post, I see that Hans has found the problem in the buffering code.
but you're going to test it -) Indeed I have, but my tests mean little beyond what I can eyeball to see if it still looks okay. I might say that the issue is resolved for my small environment but I do not know what side-effects may result from
On 2014-06-25 16:07, Hans Hagen wrote: the change. I have no library of edge cases, no integrated build environment, and only a single platform. That said, however, the issue disappears for my projects when I remake ConTeXt (and ConTeXtjit) with your patch. And clearly, the \ignorespaces that I used in my workaround was just a convenient no-op. I could have used {} or \relax to the same effect. -- Rik Kabel
participants (3)
-
Hans Hagen
-
Rik
-
Rik Kabel