Dear all, Is it possible in ConTeXt within lua code to do “trial typesetting” (not sure that’s best name for what I would like to achieve) ? By this I mean store some input (with text and macros) in some buffer and do what ConTeXt does normally (parsing, create nodes …) but instead of shipping the nodes to line breaking algorithm and to the page output, only retrieve the nodes and after discard them. This is to get an estimate of the total text width within a paragraph (to calculate some shape on the paragraph). I browsed the lua code from http://source.contextgarden.net/ but I do not dare to use too low level lua functionality. Many thanks for any hint (even a pointer to lua function). Best regards Joseph Canedo
Hello, I was wondering if someone could have some hints on this question, anyway, I found the function mknodes() from luaTeX wiki and nodes.handlers.characters(head) function in ConTeXt (as it seems that node.ligaturing(head) and node.kerning(head) do not seem to do anything). It seems to work fine (ligatures and font features) expect the kerning. Does someone know how to perform the kerning as well ? Best regards Joseph Canedo From: josephcanedo@gmail.com Sent: Saturday, November 14, 2015 11:16 AM To: ntg-context@ntg.nl Dear all, Is it possible in ConTeXt within lua code to do “trial typesetting” (not sure that’s best name for what I would like to achieve) ? By this I mean store some input (with text and macros) in some buffer and do what ConTeXt does normally (parsing, create nodes …) but instead of shipping the nodes to line breaking algorithm and to the page output, only retrieve the nodes and after discard them. This is to get an estimate of the total text width within a paragraph (to calculate some shape on the paragraph). I browsed the lua code from http://source.contextgarden.net/ but I do not dare to use too low level lua functionality. Many thanks for any hint (even a pointer to lua function). Best regards Joseph Canedo
Just in case it is of interest (and assuming this won’t change in future versions), after digging again in lua code I replaced nodes.handlers.characters(head) with local proc = nodes.tasks.actions('processors') -- not sure finalizers tasks are needed ? head = proc(head) before passing returned head to linebreak: local vbox, info = tex.linebreak(head, {}) node.write(vbox) and it shows kern in ouput, apparently identical to vanilla typesetting. Joseph From: josephcanedo@gmail.com Sent: Tuesday, November 17, 2015 9:15 AM To: ntg-context@ntg.nl Hello, I was wondering if someone could have some hints on this question, anyway, I found the function mknodes() from luaTeX wiki and nodes.handlers.characters(head) function in ConTeXt (as it seems that node.ligaturing(head) and node.kerning(head) do not seem to do anything). It seems to work fine (ligatures and font features) expect the kerning. Does someone know how to perform the kerning as well ? Best regards Joseph Canedo From: josephcanedo@gmail.com Sent: Saturday, November 14, 2015 11:16 AM To: ntg-context@ntg.nl Dear all, Is it possible in ConTeXt within lua code to do “trial typesetting” (not sure that’s best name for what I would like to achieve) ? By this I mean store some input (with text and macros) in some buffer and do what ConTeXt does normally (parsing, create nodes …) but instead of shipping the nodes to line breaking algorithm and to the page output, only retrieve the nodes and after discard them. This is to get an estimate of the total text width within a paragraph (to calculate some shape on the paragraph). I browsed the lua code from http://source.contextgarden.net/ but I do not dare to use too low level lua functionality. Many thanks for any hint (even a pointer to lua function). Best regards Joseph Canedo
On 11/17/2015 9:15 AM, josephcanedo@gmail.com wrote:
Hello,
I was wondering if someone could have some hints on this question, anyway, I found the function mknodes() from luaTeX wiki and nodes.handlers.characters(head) function in ConTeXt (as it seems that node.ligaturing(head) and node.kerning(head) do not seem to do anything).
It seems to work fine (ligatures and font features) expect the kerning. Does someone know how to perform the kerning as well ?
I'm not sure if i understand your issue. traditional ligaturing and kerning is applied when a node list has fonts using basemode \starttext \startluacode local hbox = nodes.typesetters.hpack("Hello World!") context("%p",hbox.width) nodes.flush_list(hbox) \stopluacode \stoptext
Best regards
Joseph Canedo
*From:* josephcanedo@gmail.com mailto:josephcanedo@gmail.com *Sent:* Saturday, November 14, 2015 11:16 AM *To:* ntg-context@ntg.nl mailto:ntg-context@ntg.nl
Dear all,
Is it possible in ConTeXt within lua code to do “trial typesetting” (not sure that’s best name for what I would like to achieve) ? By this I mean store some input (with text and macros) in some buffer and do what ConTeXt does normally (parsing, create nodes …) but instead of shipping the nodes to line breaking algorithm and to the page output, only retrieve the nodes and after discard them. This is to get an estimate of the total text width within a paragraph (to calculate some shape on the paragraph).
you can assemble a list of characters and then do an hpack on them
I browsed the lua code from http://source.contextgarden.net/ http://source.contextgarden.net/tex/context/base/node-ref.lua?search=nodecod... but I do not dare to use too low level lua functionality.
Many thanks for any hint (even a pointer to lua function).
Best regards
Joseph Canedo
___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context webpage : http://www.pragma-ade.nl / http://tex.aanhet.net archive : http://foundry.supelec.fr/projects/contextrev/ wiki : http://contextgarden.net ___________________________________________________________________________________
-- ----------------------------------------------------------------- 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 -----------------------------------------------------------------
Hi Hans First of all, thanks a lot for replying. I tried your suggestion and it does not seem to work at least for fancy features in EB Garamond (historical liguratures and other features). I also tried to pass the hbox to tex.linebreak() and got assertion failure in luatex. Is there any code snippet available to show the full process in lua code (I mean up to shipping the result nodes to the page) ? To give some background, I’d like to compute a parshape for some paragraphs for which I’d like some special shape. I thought that one idea was to build up the lua nodes from text (which has some occasional words with smaller or different font style), compute the width of text to figure out a first guess for parshape and then iterate on linebreak with different parshape settings to refine the first guess. Thanks a lot, Best regards Joseph From: Hans Hagen Sent: Wednesday, November 18, 2015 2:46 AM To: ntg-context@ntg.nl On 11/17/2015 9:15 AM, josephcanedo@gmail.com wrote:
Hello,
I was wondering if someone could have some hints on this question, anyway, I found the function mknodes() from luaTeX wiki and nodes.handlers.characters(head) function in ConTeXt (as it seems that node.ligaturing(head) and node.kerning(head) do not seem to do anything).
It seems to work fine (ligatures and font features) expect the kerning. Does someone know how to perform the kerning as well ?
I'm not sure if i understand your issue. traditional ligaturing and kerning is applied when a node list has fonts using basemode \starttext \startluacode local hbox = nodes.typesetters.hpack("Hello World!") context("%p",hbox.width) nodes.flush_list(hbox) \stopluacode \stoptext
Best regards
Joseph Canedo
*From:* josephcanedo@gmail.com mailto:josephcanedo@gmail.com *Sent:* Saturday, November 14, 2015 11:16 AM *To:* ntg-context@ntg.nl mailto:ntg-context@ntg.nl
Dear all,
Is it possible in ConTeXt within lua code to do “trial typesetting” (not sure that’s best name for what I would like to achieve) ? By this I mean store some input (with text and macros) in some buffer and do what ConTeXt does normally (parsing, create nodes …) but instead of shipping the nodes to line breaking algorithm and to the page output, only retrieve the nodes and after discard them. This is to get an estimate of the total text width within a paragraph (to calculate some shape on the paragraph).
you can assemble a list of characters and then do an hpack on them
I browsed the lua code from http://source.contextgarden.net/ http://source.contextgarden.net/tex/context/base/node-ref.lua?search=nodecod... but I do not dare to use too low level lua functionality.
Many thanks for any hint (even a pointer to lua function).
Best regards
Joseph Canedo
___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context webpage : http://www.pragma-ade.nl / http://tex.aanhet.net archive : http://foundry.supelec.fr/projects/contextrev/ wiki : http://contextgarden.net ___________________________________________________________________________________
-- ----------------------------------------------------------------- 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 ----------------------------------------------------------------- ___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki! maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context webpage : http://www.pragma-ade.nl / http://tex.aanhet.net archive : http://foundry.supelec.fr/projects/contextrev/ wiki : http://contextgarden.net ___________________________________________________________________________________
On 11/18/2015 9:49 PM, josephcanedo@gmail.com wrote:
Hi Hans
First of all, thanks a lot for replying.
I tried your suggestion and it does not seem to work at least for fancy features in EB Garamond (historical liguratures and other features). I also tried to pass the hbox to tex.linebreak() and got assertion failure in luatex.
are you sure that you defined that font and that it's the current font?
Is there any code snippet available to show the full process in lua code (I mean up to shipping the result nodes to the page) ?
no ... thousands of lines spread over many files
To give some background, I’d like to compute a parshape for some paragraphs for which I’d like some special shape. I thought that one idea was to build up the lua nodes from text (which has some occasional words with smaller or different font style), compute the width of text to figure out a first guess for parshape and then iterate on linebreak with different parshape settings to refine the first guess.
just put stuff in vboxes and loop over that; at the tex end with calls to lua Hans ----------------------------------------------------------------- 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 -----------------------------------------------------------------
are you sure that you defined that font and that it's the current font?
I’ll double check my code and may I send you a MWE if I can still not see the ligatures and stuff. I’ll try also with new beta (have not installed yet) just in case.
just put stuff in vboxes and loop over that; at the tex end with calls to lua
Not sure I follow what you mean, sorry about this. I am quite a newbie in ConTeXt and in TeX more generally. Thanks Joseph From: Hans Hagen Sent: Wednesday, November 18, 2015 10:22 PM To: ntg-context@ntg.nl On 11/18/2015 9:49 PM, josephcanedo@gmail.com wrote:
Hi Hans
First of all, thanks a lot for replying.
I tried your suggestion and it does not seem to work at least for fancy features in EB Garamond (historical liguratures and other features). I also tried to pass the hbox to tex.linebreak() and got assertion failure in luatex.
are you sure that you defined that font and that it's the current font?
Is there any code snippet available to show the full process in lua code (I mean up to shipping the result nodes to the page) ?
no ... thousands of lines spread over many files
To give some background, I’d like to compute a parshape for some paragraphs for which I’d like some special shape. I thought that one idea was to build up the lua nodes from text (which has some occasional words with smaller or different font style), compute the width of text to figure out a first guess for parshape and then iterate on linebreak with different parshape settings to refine the first guess.
just put stuff in vboxes and loop over that; at the tex end with calls to lua Hans ----------------------------------------------------------------- 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 ----------------------------------------------------------------- ___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki! maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context webpage : http://www.pragma-ade.nl / http://tex.aanhet.net archive : http://foundry.supelec.fr/projects/contextrev/ wiki : http://contextgarden.net ___________________________________________________________________________________
Attached simple MWE. The second line has no ligatures/ no glyph substitution/ kern Using: ConTeXt ver: 2015.10.09 21:28 MKIV beta fmt: 2015.11.1 Thanks Best regards Joseph From: josephcanedo@gmail.com Sent: Wednesday, November 18, 2015 10:36 PM To: ntg-context@ntg.nl
are you sure that you defined that font and that it's the current font?
I’ll double check my code and may I send you a MWE if I can still not see the ligatures and stuff. I’ll try also with new beta (have not installed yet) just in case.
just put stuff in vboxes and loop over that; at the tex end with calls to lua
Not sure I follow what you mean, sorry about this. I am quite a newbie in ConTeXt and in TeX more generally. Thanks Joseph From: Hans Hagen Sent: Wednesday, November 18, 2015 10:22 PM To: ntg-context@ntg.nl On 11/18/2015 9:49 PM, josephcanedo@gmail.com wrote:
Hi Hans
First of all, thanks a lot for replying.
I tried your suggestion and it does not seem to work at least for fancy features in EB Garamond (historical liguratures and other features). I also tried to pass the hbox to tex.linebreak() and got assertion failure in luatex.
are you sure that you defined that font and that it's the current font?
Is there any code snippet available to show the full process in lua code (I mean up to shipping the result nodes to the page) ?
no ... thousands of lines spread over many files
To give some background, I’d like to compute a parshape for some paragraphs for which I’d like some special shape. I thought that one idea was to build up the lua nodes from text (which has some occasional words with smaller or different font style), compute the width of text to figure out a first guess for parshape and then iterate on linebreak with different parshape settings to refine the first guess.
just put stuff in vboxes and loop over that; at the tex end with calls to lua Hans ----------------------------------------------------------------- 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 ----------------------------------------------------------------- ___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki! maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context webpage : http://www.pragma-ade.nl / http://tex.aanhet.net archive : http://foundry.supelec.fr/projects/contextrev/ wiki : http://contextgarden.net ___________________________________________________________________________________
On 11/19/2015 5:16 PM, josephcanedo@gmail.com wrote:
Attached simple MWE. The second line has no ligatures/ no glyph substitution/ kern
use this ... \startluacode userdata = userdata or { } if not nodes.typesetters.tohbox then function nodes.typesetters.tohbox(...) local list = nodes.typesetters.tonodes(...) local head = nodes.processors.hpack_filter(list) local hbox = node.hpack(head) return hbox end end function userdata.typeset(text) node.write((nodes.typesetters.tohbox(text))) end \stopluacode i'll add tohbox to the core ----------------------------------------------------------------- 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 -----------------------------------------------------------------
I’ll try this in a minute. Thanks a million. Another bit of complexity, if I have some words in different font (only a few of them), should I call tohbox for these separately and “chain” the different hboxes together ? For example the idea is to “emulate” for instance: The second line has a word typeset in {\tfx smaller } size. Thanks a lot again for your help, Best regards, Joseph From: Hans Hagen Sent: Thursday, November 19, 2015 8:11 PM To: ntg-context@ntg.nl On 11/19/2015 5:16 PM, josephcanedo@gmail.com wrote:
Attached simple MWE. The second line has no ligatures/ no glyph substitution/ kern
use this ... \startluacode userdata = userdata or { } if not nodes.typesetters.tohbox then function nodes.typesetters.tohbox(...) local list = nodes.typesetters.tonodes(...) local head = nodes.processors.hpack_filter(list) local hbox = node.hpack(head) return hbox end end function userdata.typeset(text) node.write((nodes.typesetters.tohbox(text))) end \stopluacode i'll add tohbox to the core ----------------------------------------------------------------- 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 ----------------------------------------------------------------- ___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki! maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context webpage : http://www.pragma-ade.nl / http://tex.aanhet.net archive : http://foundry.supelec.fr/projects/contextrev/ wiki : http://contextgarden.net ___________________________________________________________________________________
On 11/19/2015 8:26 PM, josephcanedo@gmail.com wrote:
I’ll try this in a minute. Thanks a million. Another bit of complexity, if I have some words in different font (only a few of them), should I call tohbox for these separately and “chain” the different hboxes together ? For example the idea is to “emulate” for instance:
The second line has a word typeset in {\tfx smaller } size.
the string is not interpreted why not put the content it in a box ? \setbox0\hbox{....} you can then use the list at he lua end with tex.box[0]
Thanks a lot again for your help,
Best regards,
Joseph
*From:* Hans Hagen mailto:pragma@wxs.nl *Sent:* Thursday, November 19, 2015 8:11 PM *To:* ntg-context@ntg.nl mailto:ntg-context@ntg.nl
On 11/19/2015 5:16 PM, josephcanedo@gmail.com wrote:
Attached simple MWE. The second line has no ligatures/ no glyph substitution/ kern
use this ...
\startluacode userdata = userdata or { }
if not nodes.typesetters.tohbox then function nodes.typesetters.tohbox(...) local list = nodes.typesetters.tonodes(...) local head = nodes.processors.hpack_filter(list) local hbox = node.hpack(head) return hbox end end
function userdata.typeset(text) node.write((nodes.typesetters.tohbox(text))) end
\stopluacode
i'll add tohbox to the core
----------------------------------------------------------------- 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 ----------------------------------------------------------------- ___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context webpage : http://www.pragma-ade.nl / http://tex.aanhet.net archive : http://foundry.supelec.fr/projects/contextrev/ wiki : http://contextgarden.net ___________________________________________________________________________________
___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context webpage : http://www.pragma-ade.nl / http://tex.aanhet.net archive : http://foundry.supelec.fr/projects/contextrev/ wiki : http://contextgarden.net ___________________________________________________________________________________
-- ----------------------------------------------------------------- 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 -----------------------------------------------------------------
participants (2)
-
Hans Hagen
-
josephcanedo@gmail.com