From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.io/gmane.comp.tex.context/109705 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Jano Kula Newsgroups: gmane.comp.tex.context Subject: Re: Setting and measuring boxes TeX/Lua Date: Fri, 27 Nov 2020 17:47:07 +0100 Message-ID: References: Reply-To: mailing list for ConTeXt users Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="0000000000005acb3705b5196bc7" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="35067"; mail-complaints-to="usenet@ciao.gmane.io" Cc: mailing list for ConTeXt users To: Hans Hagen Original-X-From: ntg-context-bounces@ntg.nl Fri Nov 27 17:48:46 2020 Return-path: Envelope-to: gctc-ntg-context-518@m.gmane-mx.org Original-Received: from zapf.boekplan.nl ([5.39.185.232] helo=zapf.ntg.nl) by ciao.gmane.io with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kigvN-00091C-TL for gctc-ntg-context-518@m.gmane-mx.org; Fri, 27 Nov 2020 17:48:45 +0100 Original-Received: from localhost (localhost [127.0.0.1]) by zapf.ntg.nl (Postfix) with ESMTP id 80C7A1AA781; Fri, 27 Nov 2020 17:47:48 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at zapf.boekplan.nl Original-Received: from zapf.ntg.nl ([127.0.0.1]) by localhost (zapf.ntg.nl [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id r9P_lFfF4mzQ; Fri, 27 Nov 2020 17:47:47 +0100 (CET) Original-Received: from zapf.ntg.nl (localhost [127.0.0.1]) by zapf.ntg.nl (Postfix) with ESMTP id 8BF281AA76A; Fri, 27 Nov 2020 17:47:47 +0100 (CET) Original-Received: from localhost (localhost [127.0.0.1]) by zapf.ntg.nl (Postfix) with ESMTP id E1A1C1AA723 for ; Fri, 27 Nov 2020 17:47:45 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at zapf.boekplan.nl Original-Received: from zapf.ntg.nl ([127.0.0.1]) by localhost (zapf.ntg.nl [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 8aHSYsfmFkYs for ; Fri, 27 Nov 2020 17:47:45 +0100 (CET) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=209.85.167.173; helo=mail-oi1-f173.google.com; envelope-from=jano.kula@gmail.com; receiver= Original-Received: from mail-oi1-f173.google.com (mail-oi1-f173.google.com [209.85.167.173]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by zapf.ntg.nl (Postfix) with ESMTPS id 17BE31AA6A5 for ; Fri, 27 Nov 2020 17:47:45 +0100 (CET) Original-Received: by mail-oi1-f173.google.com with SMTP id f11so6465515oij.6 for ; Fri, 27 Nov 2020 08:47:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=UZKZywVLzjCUyG3a3/EWB6eQ/4kWyu5S6YDbuLP2hVM=; b=ZiEoyuSRYRAqpNAJPxcmXYvc+hrnKsvk3nYjDGthfNGRZUKId9wUOvz6KkTF3L1pUG XcNfGEF0WuDG/DxqxFiDacIBZtoz76ov7pEV8iAkEOHEolCYSVYZ62NXeNjCzzUE+CKL ViCJ7QSrUjodXM2H0ZesMF1vNcXIeSa49QaIJr7EwUW7gX+ESHv55bTrhPPOAnukrO5v Pz0yNC1+eWsm1K1z/0l2zpx5UUiEA6Mci93reGvknIzy0P2vVpNmIsxE+k/SFWmt+4XX OGDioHRhTkn/L+Qy40sWEU81dB0KpZoiOI093RWEgFd7MEZuGt+9V8O+/oPoJOvdClPu pbGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=UZKZywVLzjCUyG3a3/EWB6eQ/4kWyu5S6YDbuLP2hVM=; b=qx6h+zLiekuq4i4YHWrp1skWDrObJ2NX/3afeMWiqjkOXEwzvFW1aAWuUo1CybAlEi gR8g0TOm9LSp4xV/DKnGsErzkXL6A0MTAYE6FT5sqV90rymyJn2gWyxSBn/Vw++5h2gQ k7FWlCu/ZI2Kt28oY/6X4PIply/AxLhJO2axNAo+of9fvTGxO5IZBAabGAacjc+Vj8Kg eUYa1RR5vT+Qz9UY6bPAT7SNU45qlNN8aNiMbi0jZ0ReobsdMHRJbBkoGdjwKAKNteuU zs/+dioJTQ3K9ofQvcl0iiKXKUCaLRv+JtEm9fF1QR7YOchmqEhXF2PQjHG4kvzaruL0 4jfA== X-Gm-Message-State: AOAM5316GspYHt4sA0MK0e1RA946KlC6ljSIvf/5jV4UXQMCJlYaQw7/ WYRhOsmkPpU6KyhhVaqZLsmOneyrHEYA9rR/zPA= X-Google-Smtp-Source: ABdhPJwxQKZKIJHzKDL9FVpvGCr5f2Ytc+U6n1HjHXdZMGJnkfoyNhfme8vaLiu2tSPfI0PyMYW0M9ESl95jeC4xR/k= X-Received: by 2002:aca:fc97:: with SMTP id a145mr5940901oii.178.1606495663451; Fri, 27 Nov 2020 08:47:43 -0800 (PST) In-Reply-To: X-BeenThere: ntg-context@ntg.nl X-Mailman-Version: 2.1.26 Precedence: list List-Id: mailing list for ConTeXt users List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ntg-context-bounces@ntg.nl Original-Sender: "ntg-context" Xref: news.gmane.io gmane.comp.tex.context:109705 Archived-At: --0000000000005acb3705b5196bc7 Content-Type: multipart/alternative; boundary="0000000000005acb3505b5196bc5" --0000000000005acb3505b5196bc5 Content-Type: text/plain; charset="UTF-8" Hello again, Hans! On Thu, 26 Nov 2020 at 09:18, Hans Hagen wrote: > (this mechanism is already kind of old, there are also other cheats > possible) > Diving into functions and using context.stepwise() worked, until I've got to: /cldf-stp.lua:48: bad argument #1 to 'resume' (thread expected) and other errors. It was triar/error approach, not exactly knowing how context.stepwise() works, and I was some more lua functions and iterations before needing expansion. Therefore I've changed the strategy (cannot give up): - Create named buffers with formatted content (and store measures) before they are needed. - When needed, use the reference to the buffer. Tests looked promising. After \starttext buffers and measures are known (both TeX & Lua). Also tested in functions, etc. But inside the first \xmlsetup, they are not expanded anymore, they are typeset (like \typebuffer). - How to have them expanded in \xmlsetup? - Is other mechanism better suited for storing typeset blocks than buffers (and will survive \xmlsetup)? - If none of them is possible, what are the *other **cheats *then? Thanks, Jano MWE attached % BUFFERS \startluacode -- fill buffers for i=1,1000 do local content = "framed-" .. i context.startbuffer( { i } ) context.StartBox() context.bold(i)context.par() context.color( { "red" }, content ) context.StopBox() context.copy(false,0) context.stopbuffer() print(">>", i) end \stopluacode \def\StartBox{\setbox0=\hbox\bgroup\framed[width=50mm, background=color, backgroundcolor=gray, frame=off,align={flushleft}]% \bgroup% \vbox\bgroup} \def\StopBox{\egroup\egroup\egroup}% close vbox, framed, hbox \def\MeasureBuffer[#1]{\setbox0\hbox{\getbuffer[#1]}% ht: \the\ht0\par} % XML \startbuffer[doc]
section
section
\stopbuffer \startxmlsetups xml:name \xmlsetsetup{\xmldocument}{*}{-} \xmlsetsetup{\xmldocument}{document}{xml:name:*} \stopxmlsetups \xmlregistersetup{xml:name} \startxmlsetups xml:name:document \Title{inside xml:name:document} \Title{TeX} \MeasureBuffer[333] \getbuffer[333] \Title{Lua} \startluacode context.MeasureBuffer({"444"}) context.getbuffer({"444"}) \stopluacode \stopxmlsetups \def\Title#1{\blank{\bf #1}\par} \starttext \Title{TeX} \MeasureBuffer[111] \getbuffer[111] \Title{Lua} \startluacode context.MeasureBuffer({"222"}) context.getbuffer({"222"}) \stopluacode \xmlprocessbuffer{xml:name}{doc}{} \stoptext --0000000000005acb3505b5196bc5 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hello again, Hans!

On Thu, 26 Nov 2020 at = 09:18, Hans Hagen <j.hagen@xs4all.nl> wrote:
(this mechanism is already kind of old, there are also o= ther cheats
possible)

Diving into functions and usi= ng context.stepwise()=C2=A0worked, until I&= #39;ve got to:=C2=A0/cldf-stp.lua:48: bad argument= #1 to 'resume' (thread expected)=C2=A0and other errors. It = was triar/error approach, not exactly knowing how = context.stepwise() works, and I was some more lua functions and iter= ations before needing expansion.

Therefore I'v= e changed the strategy (cannot give up):
  • Create named buf= fers with formatted content (and store measures) before they are needed.
  • When needed, use the reference to the buffer.
Tes= ts looked promising. After \starttext buffe= rs and measures are known (both TeX & Lua). Also tested in functions, e= tc.
But inside the first \xmlsetup, they are not expanded anymore, they are typeset=C2=A0(like=C2=A0\typebuffer).=C2=A0
  • How to have t= hem expanded in \xmlsetup?
  • Is other= mechanism better suited for storing typeset=C2=A0blocks than buffers (and = will survive \xmlsetup)?
  • If none of= them is possible, what are the other cheats then?
<= /div>
Thanks,
Jano

MWE attached

% BUFFERS
\startluacode
-- fill buffers
for i=3D1,10= 00 do
=C2=A0 =C2=A0 local content =3D "framed-" .. i
=C2=A0= =C2=A0 context.startbuffer( { i } )
=C2=A0 =C2=A0 context.StartBox()=C2=A0 =C2=A0 context.bold(i)context.par()
=C2=A0 =C2=A0 context.color(= { "red" }, content )
=C2=A0 =C2=A0 context.StopBox()
=C2= =A0 =C2=A0 context.copy(false,0)
=C2=A0 =C2=A0 context.stopbuffer()
= =C2=A0 =C2=A0 print(">>", i)
end
\stopluacode

= \def\StartBox{\setbox0=3D\hbox\bgroup\framed[width=3D50mm,
=C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0backgroun= d=3Dcolor,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0backgroundcolor=3Dgray,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0frame=3Doff,align=3D{fl= ushleft}]%
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0\bgroup%
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 \vbox\bgroup}
\def\= StopBox{\egroup\egroup\egroup}% close vbox, framed, hbox

\def\Measur= eBuffer[#1]{\setbox0\hbox{\getbuffer[#1]}%
=C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0ht: \the\ht0\par}

% XML
\startbuffer[doc]
<?xml version "1.0"?>= ;
<document>
=C2=A0 =C2=A0 <section>section</section&g= t;
=C2=A0 =C2=A0 <section>section</section>
</document= >
\stopbuffer

\startxmlsetups xml:name
=C2=A0 =C2=A0 \xmlse= tsetup{\xmldocument}{*}{-}
=C2=A0 =C2=A0 \xmlsetsetup{\xmldocument}{docu= ment}{xml:name:*}
\stopxmlsetups

\xmlregistersetup{xml:name}
<= br>\startxmlsetups xml:name:document
=C2=A0 =C2=A0 \Title{inside xml:nam= e:document}
=C2=A0 =C2=A0 \Title{TeX}
=C2=A0 =C2=A0 \MeasureBuffer[33= 3]
=C2=A0 =C2=A0 \getbuffer[333]
=C2=A0 =C2=A0 \Title{Lua}
=C2=A0 = =C2=A0 \startluacode
=C2=A0 =C2=A0 context.MeasureBuffer({"444"= ;})
=C2=A0 =C2=A0 context.getbuffer({"444"})
=C2=A0 =C2=A0 = \stopluacode
\stopxmlsetups

\def\Title#1{\blank{\bf #1}\par}


\starttext

\Title{= TeX}
\MeasureBuffer[111]
\getbuffer[111]

\Title{Lua}
\start= luacode
context.MeasureBuffer({"222"})
context.getbuffer({&= quot;222"})
\stopluacode

\xmlprocessbuffer{xml:name}{doc}{}<= br>
\stoptext
=C2=A0<= /div>
=C2=A0
--0000000000005acb3505b5196bc5-- --0000000000005acb3705b5196bc7 Content-Type: application/x-tex; name="xml-buffers.tex" Content-Disposition: attachment; filename="xml-buffers.tex" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ki0hf8cn0 JSBCVUZGRVJTDQpcc3RhcnRsdWFjb2RlDQotLSBmaWxsIGJ1ZmZlcnMNCmZvciBpPTEsMTAwMCBk bw0KICAgIGxvY2FsIGNvbnRlbnQgPSAiZnJhbWVkLSIgLi4gaQ0KICAgIGNvbnRleHQuc3RhcnRi dWZmZXIoIHsgaSB9ICkNCiAgICBjb250ZXh0LlN0YXJ0Qm94KCkNCiAgICBjb250ZXh0LmJvbGQo aSljb250ZXh0LnBhcigpDQogICAgY29udGV4dC5jb2xvciggeyAicmVkIiB9LCBjb250ZW50ICkN CiAgICBjb250ZXh0LlN0b3BCb3goKQ0KICAgIGNvbnRleHQuY29weShmYWxzZSwwKQ0KICAgIGNv bnRleHQuc3RvcGJ1ZmZlcigpDQogICAgcHJpbnQoIj4+IiwgaSkNCmVuZA0KXHN0b3BsdWFjb2Rl DQoNClxkZWZcU3RhcnRCb3h7XHNldGJveDA9XGhib3hcYmdyb3VwXGZyYW1lZFt3aWR0aD01MG1t LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ9 Y29sb3IsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dy b3VuZGNvbG9yPWdyYXksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZnJhbWU9b2ZmLGFsaWduPXtmbHVzaGxlZnR9XSUNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcYmdyb3VwJQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXHZib3hcYmdyb3VwfQ0KXGRlZlxTdG9wQm94e1xlZ3JvdXBc ZWdyb3VwXGVncm91cH0lIGNsb3NlIHZib3gsIGZyYW1lZCwgaGJveA0KDQpcZGVmXE1lYXN1cmVC dWZmZXJbIzFde1xzZXRib3gwXGhib3h7XGdldGJ1ZmZlclsjMV19JQ0KICAgICAgICAgICAgICAg ICAgICAgICBodDogXHRoZVxodDBccGFyfQ0KDQoNCiUgWE1MDQpcc3RhcnRidWZmZXJbZG9jXQ0K PD94bWwgdmVyc2lvbiAiMS4wIj8+DQo8ZG9jdW1lbnQ+DQogICAgPHNlY3Rpb24+c2VjdGlvbjwv c2VjdGlvbj4NCiAgICA8c2VjdGlvbj5zZWN0aW9uPC9zZWN0aW9uPg0KPC9kb2N1bWVudD4NClxz dG9wYnVmZmVyDQoNClxzdGFydHhtbHNldHVwcyB4bWw6bmFtZQ0KICAgIFx4bWxzZXRzZXR1cHtc eG1sZG9jdW1lbnR9eyp9ey19DQogICAgXHhtbHNldHNldHVwe1x4bWxkb2N1bWVudH17ZG9jdW1l bnR9e3htbDpuYW1lOip9DQpcc3RvcHhtbHNldHVwcw0KDQpceG1scmVnaXN0ZXJzZXR1cHt4bWw6 bmFtZX0NCg0KXHN0YXJ0eG1sc2V0dXBzIHhtbDpuYW1lOmRvY3VtZW50DQogICAgXFRpdGxle2lu c2lkZSB4bWw6bmFtZTpkb2N1bWVudH0NCiAgICBcVGl0bGV7VGVYfQ0KICAgIFxNZWFzdXJlQnVm ZmVyWzMzM10NCiAgICBcZ2V0YnVmZmVyWzMzM10NCiAgICBcVGl0bGV7THVhfQ0KICAgIFxzdGFy dGx1YWNvZGUNCiAgICBjb250ZXh0Lk1lYXN1cmVCdWZmZXIoeyI0NDQifSkNCiAgICBjb250ZXh0 LmdldGJ1ZmZlcih7IjQ0NCJ9KQ0KICAgIFxzdG9wbHVhY29kZQ0KXHN0b3B4bWxzZXR1cHMNCg0K XGRlZlxUaXRsZSMxe1xibGFua3tcYmYgIzF9XHBhcn0NCg0KDQpcc3RhcnR0ZXh0DQoNClxUaXRs ZXtUZVh9DQpcTWVhc3VyZUJ1ZmZlclsxMTFdDQpcZ2V0YnVmZmVyWzExMV0NCg0KXFRpdGxle0x1 YX0NClxzdGFydGx1YWNvZGUNCmNvbnRleHQuTWVhc3VyZUJ1ZmZlcih7IjIyMiJ9KQ0KY29udGV4 dC5nZXRidWZmZXIoeyIyMjIifSkNClxzdG9wbHVhY29kZQ0KDQpceG1scHJvY2Vzc2J1ZmZlcnt4 bWw6bmFtZX17ZG9jfXt9DQoNClxzdG9wdGV4dA0K --0000000000005acb3705b5196bc7 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: inline X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KSWYgeW91ciBxdWVzdGlvbiBpcyBvZiBpbnRlcmVz dCB0byBvdGhlcnMgYXMgd2VsbCwgcGxlYXNlIGFkZCBhbiBlbnRyeSB0byB0aGUgV2lraSEKCm1h aWxsaXN0IDogbnRnLWNvbnRleHRAbnRnLm5sIC8gaHR0cDovL3d3dy5udGcubmwvbWFpbG1hbi9s aXN0aW5mby9udGctY29udGV4dAp3ZWJwYWdlICA6IGh0dHA6Ly93d3cucHJhZ21hLWFkZS5ubCAv IGh0dHA6Ly9jb250ZXh0LmFhbmhldC5uZXQKYXJjaGl2ZSAgOiBodHRwczovL2JpdGJ1Y2tldC5v cmcvcGhnL2NvbnRleHQtbWlycm9yL2NvbW1pdHMvCndpa2kgICAgIDogaHR0cDovL2NvbnRleHRn YXJkZW4ubmV0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCg== --0000000000005acb3705b5196bc7--