* \autoinsertedspace fails
@ 2022-12-30 0:12 Rik Kabel via ntg-context
2023-01-04 22:10 ` Rik Kabel via ntg-context
0 siblings, 1 reply; 8+ messages in thread
From: Rik Kabel via ntg-context @ 2022-12-30 0:12 UTC (permalink / raw)
To: mailing list for ConTeXt users; +Cc: Rik Kabel
[-- Attachment #1.1: Type: text/plain, Size: 1777 bytes --]
Happy New Year all!
Following up on the problem with \autoinsertnextspace
(https://mailman.ntg.nl/pipermail/ntg-context/2022/107111.html) and the
new \autoinsertedspace that came from that report, I see that there is
still a problem, or perhaps a problem again after it was previously
repaired.
The following code, run under the latest (and recent previous) version,
produces an incorrect result, with no space inserted where expected in
many cases. As the first examples after \starttext show, the problem
appears to be with \autoinsertedspace, but perhaps I am using it
incorrectly in the macro as well.
\starttexdefinition unexpanded BD
\dodoublegroupempty
\doBD
\stoptexdefinition
\starttexdefinition doBD #1#2
\removeunwantedspaces\ % insert a space
(
\ifsecondargument
#1|–|#2
\else\iffirstargument
#1–
\else
{\red I NEED A DATE OR DATES!}
\fi\fi
)
\autoinsertedspace
\stoptexdefinition
\tt
\starttext
This\autoinsertedspace fails unexpectedly with autoinsertedspace.\par
This\autoinsertedspace \emph{fails unexpectedly} with
autoinsertedspace.\par
This\autoinsertnextspace works with autoinsertnextspace.\par
This\autoinsertnextspace \emph{fails} as expected with
autoinsertnextspace.\par
Saussure\BD{1857}{1913} works.\par
Saussure \BD{1857}{1913} \emph{works}.\par
Saussure \BD{1857}{1913}. Works.\par
Chomsky\BD{1928} fails with LMTX, works with MkIV.\par
Chomsky \BD{1928} \emph{fails with LMTX, works with MkIV}.\par
Chomsky \BD{1928}. Works.\par
\BD blah\par
\contextversion\ \texenginename
\stoptext
--
Rik
[-- Attachment #1.2: Type: text/html, Size: 2911 bytes --]
[-- Attachment #2: Type: text/plain, Size: 496 bytes --]
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / https://www.ntg.nl/mailman/listinfo/ntg-context
webpage : https://www.pragma-ade.nl / http://context.aanhet.net
archive : https://bitbucket.org/phg/context-mirror/commits/
wiki : https://contextgarden.net
___________________________________________________________________________________
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: \autoinsertedspace fails
2022-12-30 0:12 \autoinsertedspace fails Rik Kabel via ntg-context
@ 2023-01-04 22:10 ` Rik Kabel via ntg-context
2023-01-04 23:45 ` Hans Hagen via ntg-context
0 siblings, 1 reply; 8+ messages in thread
From: Rik Kabel via ntg-context @ 2023-01-04 22:10 UTC (permalink / raw)
To: ntg-context; +Cc: Rik Kabel
[-- Attachment #1.1: Type: text/plain, Size: 2534 bytes --]
No change with the latest (2023.01.04).
Is this a problem with what I am doing, or a bug?
--
Rik
On 2022-12-29 19:12, Rik Kabel via ntg-context wrote:
>
> Happy New Year all!
>
> Following up on the problem with \autoinsertnextspace
> (https://mailman.ntg.nl/pipermail/ntg-context/2022/107111.html) and
> the new \autoinsertedspace that came from that report, I see that
> there is still a problem, or perhaps a problem again after it was
> previously repaired.
>
> The following code, run under the latest (and recent previous)
> version, produces an incorrect result, with no space inserted where
> expected in many cases. As the first examples after \starttext show,
> the problem appears to be with \autoinsertedspace, but perhaps I am
> using it incorrectly in the macro as well.
>
> \starttexdefinition unexpanded BD
> \dodoublegroupempty
> \doBD
> \stoptexdefinition
>
> \starttexdefinition doBD #1#2
> \removeunwantedspaces\ % insert a space
> (
> \ifsecondargument
> #1|–|#2
> \else\iffirstargument
> #1–
> \else
> {\red I NEED A DATE OR DATES!}
> \fi\fi
> )
> \autoinsertedspace
> \stoptexdefinition
>
> \tt
>
> \starttext
> This\autoinsertedspace fails unexpectedly with autoinsertedspace.\par
> This\autoinsertedspace \emph{fails unexpectedly} with
> autoinsertedspace.\par
> This\autoinsertnextspace works with autoinsertnextspace.\par
> This\autoinsertnextspace \emph{fails} as expected with
> autoinsertnextspace.\par
> Saussure\BD{1857}{1913} works.\par
> Saussure \BD{1857}{1913} \emph{works}.\par
> Saussure \BD{1857}{1913}. Works.\par
> Chomsky\BD{1928} fails with LMTX, works with MkIV.\par
> Chomsky \BD{1928} \emph{fails with LMTX, works with MkIV}.\par
> Chomsky \BD{1928}. Works.\par
> \BD blah\par
> \contextversion\ \texenginename
> \stoptext
>
>
> --
> Rik
>
>
>
> ___________________________________________________________________________________
> If your question is of interest to others as well, please add an entry to the Wiki!
>
> maillist :ntg-context@ntg.nl /https://www.ntg.nl/mailman/listinfo/ntg-context
> webpage :https://www.pragma-ade.nl /http://context.aanhet.net
> archive :https://bitbucket.org/phg/context-mirror/commits/
> wiki :https://contextgarden.net
> ___________________________________________________________________________________
[-- Attachment #1.2: Type: text/html, Size: 4613 bytes --]
[-- Attachment #2: Type: text/plain, Size: 496 bytes --]
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / https://www.ntg.nl/mailman/listinfo/ntg-context
webpage : https://www.pragma-ade.nl / http://context.aanhet.net
archive : https://bitbucket.org/phg/context-mirror/commits/
wiki : https://contextgarden.net
___________________________________________________________________________________
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: \autoinsertedspace fails
2023-01-04 22:10 ` Rik Kabel via ntg-context
@ 2023-01-04 23:45 ` Hans Hagen via ntg-context
2023-01-05 3:21 ` Rik Kabel via ntg-context
0 siblings, 1 reply; 8+ messages in thread
From: Hans Hagen via ntg-context @ 2023-01-04 23:45 UTC (permalink / raw)
To: mailing list for ConTeXt users; +Cc: Hans Hagen
[-- Attachment #1: Type: text/plain, Size: 1060 bytes --]
On 1/4/2023 11:10 PM, Rik Kabel via ntg-context wrote:
> No change with the latest (2023.01.04).
>
> Is this a problem with what I am doing, or a bug?
well, it's new and not thtat tested ... we need to specify it
This\optionalspace fails unexpectedly with autoinsertedspace.\par
This\optionalspace \emph{fails unexpectedly} with autoinsertedspace.\par
there can be more variants, like do we want to remove preceding spaces?
we already have:
This\optionalspace, fails unexpectedly with autoinsertedspace.\par
This\optionalspace, \emph{fails unexpectedly} with autoinsertedspace.\par
This\optionalspace fails unexpectedly with autoinsertedspace.\par
This\optionalspace \emph{fails unexpectedly} with autoinsertedspace.\par
-----------------------------------------------------------------
Hans Hagen | PRAGMA ADE
Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl
-----------------------------------------------------------------
[-- Attachment #2: spac-chr.lmt --]
[-- Type: text/plain, Size: 12615 bytes --]
if not modules then modules = { } end modules ['spac-chr'] = {
version = 1.001,
optimize = true,
comment = "companion to spac-chr.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
local byte, lower = string.byte, string.lower
-- beware: attribute copying is bugged ... there will be a proper luatex helper
-- for this
-- to be redone: characters will become tagged spaces instead as then we keep track of
-- spaceskip etc
-- todo: only setattr when export / use properties
local next = next
local trace_characters = false trackers.register("typesetters.characters", function(v) trace_characters = v end)
local trace_nbsp = false trackers.register("typesetters.nbsp", function(v) trace_nbsp = v end)
local report_characters = logs.reporter("typesetting","characters")
local nodes, node = nodes, node
local nuts = nodes.nuts
local getid = nuts.getid
local getsubtype = nuts.getsubtype
local setsubtype = nuts.setsubtype
local getboth = nuts.getboth
local getnext = nuts.getnext
local getprev = nuts.getprev
local getattr = nuts.getattr
local setattr = nuts.setattr
local getlanguage = nuts.getlanguage
local setchar = nuts.setchar
local setattrlist = nuts.setattrlist
local getfont = nuts.getfont
local isglyph = nuts.isglyph
local setcolor = nodes.tracers.colors.set
local insertnodebefore = nuts.insertbefore
local insertnodeafter = nuts.insertafter
local remove_node = nuts.remove
local nextchar = nuts.traversers.char
local nextglyph = nuts.traversers.glyph
local copy_node = nuts.copy
local nodepool = nuts.pool
local new_penalty = nodepool.penalty
local new_glue = nodepool.glue
local new_kern = nodepool.kern
local new_rule = nodepool.rule
local nodecodes = nodes.nodecodes
local gluecodes = nodes.gluecodes
local glyph_code = nodecodes.glyph
local glue_code = nodecodes.glue
local spaceskip_code = gluecodes.spaceskip
local chardata = characters.data
local ispunctuation = characters.is_punctuation
local canhavespace = characters.can_have_space
local typesetters = typesetters
local unicodeblocks = characters.blocks
local characters = typesetters.characters or { } -- can be predefined
typesetters.characters = characters
local fonthashes = fonts.hashes
local fontparameters = fonthashes.parameters
local fontcharacters = fonthashes.characters
local fontquads = fonthashes.quads
local setmetatableindex = table.setmetatableindex
local a_character = attributes.private("characters")
local a_alignstate = attributes.private("alignstate")
local c_zero = byte('0')
local c_period = byte('.')
local function inject_quad_space(unicode,head,current,fraction)
if fraction ~= 0 then
fraction = fraction * fontquads[getfont(current)]
end
local glue = new_glue(fraction)
setattrlist(glue,current)
setattrlist(current) -- why reset all
setattr(glue,a_character,unicode)
return insertnodeafter(head,current,glue)
end
local function inject_char_space(unicode,head,current,parent)
local font = getfont(current)
local char = fontcharacters[font][parent]
local glue = new_glue(char and char.width or fontparameters[font].space)
setattrlist(glue,current)
setattrlist(current) -- why reset all
setattr(glue,a_character,unicode)
return insertnodeafter(head,current,glue)
end
local function inject_nobreak_space(unicode,head,current,space,spacestretch,spaceshrink)
local glue = new_glue(space,spacestretch,spaceshrink)
local penalty = new_penalty(10000)
setattrlist(glue,current)
setattrlist(penalty,current)
setattrlist(current) -- why reset all
setattr(glue,a_character,unicode) -- bombs
head, current = insertnodeafter(head,current,penalty)
if trace_nbsp then
local rule = new_rule(space)
local kern = new_kern(-space)
local penalty = new_penalty(10000)
setcolor(rule,"orange")
head, current = insertnodeafter(head,current,rule)
head, current = insertnodeafter(head,current,kern)
head, current = insertnodeafter(head,current,penalty)
end
return insertnodeafter(head,current,glue)
end
local function nbsp(head,current)
local para = fontparameters[getfont(current)]
local attr = getattr(current,a_alignstate) or 0
if attr >= 1 and attr <= 3 then -- flushright
head, current = inject_nobreak_space(0x00A0,head,current,para.space,0,0)
else
head, current = inject_nobreak_space(0x00A0,head,current,para.space,para.spacestretch,para.spaceshrink)
end
setsubtype(current,spaceskip_code)
return head, current
end
-- assumes nuts or nodes, depending on callers .. so no tonuts here
function characters.replacenbsp(head,original)
local head, current = nbsp(head,original)
return remove_node(head,original,true)
end
function characters.replacenbspaces(head)
-- todo: wiping as in characters.handler(head)
local wipe = false
for current, char, font in nextglyph, head do -- can be anytime so no traversechar
if char == 0x00A0 then
if wipe then
head = remove_node(h,current,true)
wipe = false
end
local h = nbsp(head,current)
if h then
wipe = current
end
end
end
if wipe then
head = remove_node(head,current,true)
end
return head
end
-- This initialization might move someplace else if we need more of it. The problem is that
-- this module depends on fonts so we have an order problem.
local nbsphash = { } setmetatableindex(nbsphash,function(t,k)
-- this needs checking !
for i=unicodeblocks.devanagari.first,unicodeblocks.devanagari.last do nbsphash[i] = true end
for i=unicodeblocks.kannada .first,unicodeblocks.kannada .last do nbsphash[i] = true end
setmetatableindex(nbsphash,nil)
return nbsphash[k]
end)
local methods = {
-- The next one uses an attribute assigned to the character but still we
-- don't have the 'local' value.
-- maybe also 0x0008 : backspace
-- Watch out: a return value means "remove"!
[0x001E] = function(head,current) -- kind of special
local next = getnext(current)
if next and getid(next) == glue_code and getsubtype(next) == spaceskip_code then
local nextnext = getnext(next)
if nextnext then
local char, font = isglyph(nextnext)
if char and not canhavespace[char] then
remove_node(head,next,true)
end
end
else
local char, font = isglyph(next)
if char and canhavespace[char] then
local p = fontparameters[font]
head, current = insertnodebefore(head,current,new_glue(p.space,p.spacestretch,p.spaceshrink))
end
end
return head, current
end,
[0x001F] = function(head,current) -- kind of special
local next = getnext(current)
if next then
local char, font = isglyph(next)
if char and not ispunctuation[char] then
local p = fontparameters[font]
head, current = insertnodebefore(head,current,new_glue(p.space,p.spacestretch,p.spaceshrink))
end
end
return head, current
end,
[0x00A0] = function(head,current) -- nbsp
local prev, next = getboth(current)
if next then
local char = isglyph(current)
if not char then
-- move on
elseif char == 0x200C or char == 0x200D then -- nzwj zwj
next = getnext(next)
if next then
char = isglyph(next)
if char and nbsphash[char] then
return false
end
end
elseif nbsphash[char] then
return false
end
end
if prev then
local char = isglyph(prev)
if char and nbsphash[char] then
return false
end
end
return nbsp(head,current)
end,
[0x00AD] = function(head,current) -- softhyphen
return insertnodeafter(head,current,languages.explicithyphen(current))
end,
[0x2000] = function(head,current) -- enquad
return inject_quad_space(0x2000,head,current,1/2)
end,
[0x2001] = function(head,current) -- emquad
return inject_quad_space(0x2001,head,current,1)
end,
[0x2002] = function(head,current) -- enspace
return inject_quad_space(0x2002,head,current,1/2)
end,
[0x2003] = function(head,current) -- emspace
return inject_quad_space(0x2003,head,current,1)
end,
[0x2004] = function(head,current) -- threeperemspace
return inject_quad_space(0x2004,head,current,1/3)
end,
[0x2005] = function(head,current) -- fourperemspace
return inject_quad_space(0x2005,head,current,1/4)
end,
[0x2006] = function(head,current) -- sixperemspace
return inject_quad_space(0x2006,head,current,1/6)
end,
[0x2007] = function(head,current) -- figurespace
return inject_char_space(0x2007,head,current,c_zero)
end,
[0x2008] = function(head,current) -- punctuationspace
return inject_char_space(0x2008,head,current,c_period)
end,
[0x2009] = function(head,current) -- breakablethinspace
return inject_quad_space(0x2009,head,current,1/8) -- same as next
end,
[0x200A] = function(head,current) -- hairspace
return inject_quad_space(0x200A,head,current,1/8) -- same as previous (todo)
end,
[0x200B] = function(head,current) -- zerowidthspace
return inject_quad_space(0x200B,head,current,0)
end,
[0x202F] = function(head,current) -- narrownobreakspace
return inject_nobreak_space(0x202F,head,current,fontquads[getfont(current)]/8)
end,
[0x205F] = function(head,current) -- math thinspace
return inject_nobreak_space(0x205F,head,current,4*fontquads[getfont(current)]/18)
end,
-- The next one is also a bom so maybe only when we have glyphs around it
-- [0xFEFF] = function(head,current) -- zerowidthnobreakspace
-- return head, current
-- end,
}
characters.methods = methods
function characters.handler(head)
local wipe = false
for current, char in nextchar, head do
local method = methods[char]
if method then
if wipe then
head = remove_node(head,wipe,true)
wipe = false
end
if trace_characters then
report_characters("replacing character %C, description %a",char,lower(chardata[char].description))
end
local h = method(head,current)
if h then
wipe = current
end
end
end
if wipe then
head = remove_node(head,wipe,true)
end
return head
end
-- function characters.handler(head)
-- local wiped = false
-- for current, char in nextchar, head do
-- local method = methods[char]
-- if method then
-- if wiped then
-- wiped[#wiped+1] = current
-- else
-- wiped = { current }
-- end
-- if trace_characters then
-- report_characters("replacing character %C, description %a",char,lower(chardata[char].description))
-- end
-- local h = method(head,current)
-- if h then
-- head = h
-- end
-- end
-- end
-- if wiped then
-- for i=1,#wiped do
-- head = remove_node(head,wiped[i],true)
-- end
-- end
-- return head
-- end
[-- Attachment #3: Type: text/plain, Size: 496 bytes --]
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / https://www.ntg.nl/mailman/listinfo/ntg-context
webpage : https://www.pragma-ade.nl / http://context.aanhet.net
archive : https://bitbucket.org/phg/context-mirror/commits/
wiki : https://contextgarden.net
___________________________________________________________________________________
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: \autoinsertedspace fails
2023-01-04 23:45 ` Hans Hagen via ntg-context
@ 2023-01-05 3:21 ` Rik Kabel via ntg-context
2023-01-05 7:38 ` Hans Hagen via ntg-context
2023-01-05 9:35 ` Hans Hagen via ntg-context
0 siblings, 2 replies; 8+ messages in thread
From: Rik Kabel via ntg-context @ 2023-01-05 3:21 UTC (permalink / raw)
To: mailing list for ConTeXt users; +Cc: Rik Kabel
On 2023-01-04 18:45, Hans Hagen wrote:
> On 1/4/2023 11:10 PM, Rik Kabel via ntg-context wrote:
>> No change with the latest (2023.01.04).
>>
>> Is this a problem with what I am doing, or a bug?
> well, it's new and not thtat tested ... we need to specify it
>
> This\optionalspace fails unexpectedly with autoinsertedspace.\par
> This\optionalspace \emph{fails unexpectedly} with autoinsertedspace.\par
>
> there can be more variants, like do we want to remove preceding spaces?
>
> we already have:
>
> This\optionalspace, fails unexpectedly with autoinsertedspace.\par
> This\optionalspace, \emph{fails unexpectedly} with autoinsertedspace.\par
> This\optionalspace fails unexpectedly with autoinsertedspace.\par
> This\optionalspace \emph{fails unexpectedly} with autoinsertedspace.\par
\optionalspace works correctly (that is, as I want it to) for all of my
use cases under both MkIV and LMTX. Is there any reason that this should
not be used in user documents?
I do wonder what characters are considered "punctuation" for the purpose
of suppressing the next space. The standard six sentence termination
characters (?!.:;,) are honored, and so are many others (quotation
marks, including guillemot, square and curly braces, and parens). But
sentence opening characters (¿¡) are as well. Vertical bars (|¦) and
basic mathematical characters (+-=*) are not treated as punctuation.
Where (in the source or manuals) are these to be found?
As far as removing leading spaces, I do not see that it is necessary,
but it may help create more readable sources.
Thank you for the fix.
--
Rik
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / https://www.ntg.nl/mailman/listinfo/ntg-context
webpage : https://www.pragma-ade.nl / http://context.aanhet.net
archive : https://bitbucket.org/phg/context-mirror/commits/
wiki : https://contextgarden.net
___________________________________________________________________________________
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: \autoinsertedspace fails
2023-01-05 3:21 ` Rik Kabel via ntg-context
@ 2023-01-05 7:38 ` Hans Hagen via ntg-context
2023-01-05 9:35 ` Hans Hagen via ntg-context
1 sibling, 0 replies; 8+ messages in thread
From: Hans Hagen via ntg-context @ 2023-01-05 7:38 UTC (permalink / raw)
To: ntg-context; +Cc: Hans Hagen
On 1/5/2023 4:21 AM, Rik Kabel via ntg-context wrote:
>
> On 2023-01-04 18:45, Hans Hagen wrote:
>> On 1/4/2023 11:10 PM, Rik Kabel via ntg-context wrote:
>>> No change with the latest (2023.01.04).
>>>
>>> Is this a problem with what I am doing, or a bug?
>> well, it's new and not thtat tested ... we need to specify it
>>
>> This\optionalspace fails unexpectedly with autoinsertedspace.\par
>> This\optionalspace \emph{fails unexpectedly} with autoinsertedspace.\par
>>
>> there can be more variants, like do we want to remove preceding spaces?
>>
>> we already have:
>>
>> This\optionalspace, fails unexpectedly with autoinsertedspace.\par
>> This\optionalspace, \emph{fails unexpectedly} with autoinsertedspace.\par
>> This\optionalspace fails unexpectedly with autoinsertedspace.\par
>> This\optionalspace \emph{fails unexpectedly} with autoinsertedspace.\par
>
>
> \optionalspace works correctly (that is, as I want it to) for all of my
> use cases under both MkIV and LMTX. Is there any reason that this should
> not be used in user documents?
depends ... it checks punctuation
> I do wonder what characters are considered "punctuation" for the purpose
> of suppressing the next space. The standard six sentence termination
> characters (?!.:;,) are honored, and so are many others (quotation
> marks, including guillemot, square and curly braces, and parens). But
> sentence opening characters (¿¡) are as well. Vertical bars (|¦) and
> basic mathematical characters (+-=*) are not treated as punctuation.
> Where (in the source or manuals) are these to be found?
we use unicode properties (collected in char-def.lua)
> As far as removing leading spaces, I do not see that it is necessary,
> but it may help create more readable sources.
>
> Thank you for the fix.
-----------------------------------------------------------------
Hans Hagen | PRAGMA ADE
Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
tel: 038 477 53 69 | www.pragma-ade.nl | 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 / https://www.ntg.nl/mailman/listinfo/ntg-context
webpage : https://www.pragma-ade.nl / http://context.aanhet.net
archive : https://bitbucket.org/phg/context-mirror/commits/
wiki : https://contextgarden.net
___________________________________________________________________________________
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: \autoinsertedspace fails
2023-01-05 3:21 ` Rik Kabel via ntg-context
2023-01-05 7:38 ` Hans Hagen via ntg-context
@ 2023-01-05 9:35 ` Hans Hagen via ntg-context
2023-01-06 2:05 ` Rik Kabel via ntg-context
1 sibling, 1 reply; 8+ messages in thread
From: Hans Hagen via ntg-context @ 2023-01-05 9:35 UTC (permalink / raw)
To: ntg-context; +Cc: Hans Hagen
On 1/5/2023 4:21 AM, Rik Kabel via ntg-context wrote:
>
> On 2023-01-04 18:45, Hans Hagen wrote:
>> On 1/4/2023 11:10 PM, Rik Kabel via ntg-context wrote:
>>> No change with the latest (2023.01.04).
>>>
>>> Is this a problem with what I am doing, or a bug?
>> well, it's new and not thtat tested ... we need to specify it
>>
>> This\optionalspace fails unexpectedly with autoinsertedspace.\par
>> This\optionalspace \emph{fails unexpectedly} with autoinsertedspace.\par
>>
>> there can be more variants, like do we want to remove preceding spaces?
>>
>> we already have:
>>
>> This\optionalspace, fails unexpectedly with autoinsertedspace.\par
>> This\optionalspace, \emph{fails unexpectedly} with autoinsertedspace.\par
>> This\optionalspace fails unexpectedly with autoinsertedspace.\par
>> This\optionalspace \emph{fails unexpectedly} with autoinsertedspace.\par
>
>
> \optionalspace works correctly (that is, as I want it to) for all of my
> use cases under both MkIV and LMTX. Is there any reason that this should
> not be used in user documents?
>
> I do wonder what characters are considered "punctuation" for the purpose
> of suppressing the next space. The standard six sentence termination
> characters (?!.:;,) are honored, and so are many others (quotation
> marks, including guillemot, square and curly braces, and parens). But
> sentence opening characters (¿¡) are as well. Vertical bars (|¦) and
> basic mathematical characters (+-=*) are not treated as punctuation.
> Where (in the source or manuals) are these to be found?
>
> As far as removing leading spaces, I do not see that it is necessary,
> but it may help create more readable sources.
>
> Thank you for the fix.
Here is a more lmtx-ish variant:
\starttexdefinition tolerant protected BD #=#*#=
\removeunwantedspaces
\space % insert a space
(
\ifparameter#2\or
#1|–|#2
\orelse\ifparameter#1\or
#1–
\else
{\red I NEED A DATE OR DATES!}
\fi
)
\autoinsertedspace
\stoptexdefinition
Hans
-----------------------------------------------------------------
Hans Hagen | PRAGMA ADE
Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
tel: 038 477 53 69 | www.pragma-ade.nl | 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 / https://www.ntg.nl/mailman/listinfo/ntg-context
webpage : https://www.pragma-ade.nl / http://context.aanhet.net
archive : https://bitbucket.org/phg/context-mirror/commits/
wiki : https://contextgarden.net
___________________________________________________________________________________
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: \autoinsertedspace fails
2023-01-05 9:35 ` Hans Hagen via ntg-context
@ 2023-01-06 2:05 ` Rik Kabel via ntg-context
2023-01-06 7:53 ` Hans Hagen via ntg-context
0 siblings, 1 reply; 8+ messages in thread
From: Rik Kabel via ntg-context @ 2023-01-06 2:05 UTC (permalink / raw)
To: ntg-context; +Cc: Rik Kabel
[-- Attachment #1.1: Type: text/plain, Size: 2992 bytes --]
On 2023-01-05 04:35, Hans Hagen via ntg-context wrote:
> On 1/5/2023 4:21 AM, Rik Kabel via ntg-context wrote:
[ snipped by rik]
> Here is a more lmtx-ish variant:
>
> \starttexdefinition tolerant protected BD #=#*#=
> \removeunwantedspaces
> \space % insert a space
> (
> \ifparameter#2\or
> #1|–|#2
> \orelse\ifparameter#1\or
> #1–
> \else
> {\red I NEED A DATE OR DATES!}
> \fi
> )
> \autoinsertedspace
> \stoptexdefinition
>
> Hans
Thank you for that. This works for me with \optionalspace, but fails in
some cases with \autoinsertedspace.
I have now re-read lowlevel-macros.pdf and have a better understanding
of what I read when first I approached it; I still have a way to go.
/Tolerant/ removes the need for /dodoubleempty/ and friends and the
two-step /macro/ and /doMacro/ dance. There was a small advantage to the
two-step, however. I had two separate macros, BD and BDNP (no parens),
as shown.
The old code in full was:
%-------------------- Birth and death dates -----------------------%
% Ferdinand de Saussure\BD{1857}{1913}
% Noam Chomsky \BD{1928}
%
% Perhaps this could be tied to an acronym-like database so that the
% dates are printed only once per person.
% \removeunwantedspaces allows this to directly follow, or follow
% after whitespace, the associated name: Name\BD{1}{2} or
% Name \BD{1}{2}.
% Using the compound indication (|–|) allows hyphenation after the
% endash. Omitting it and using a bare endash inhibits hyphenation
% ‘twixt the endash and the paren.
% By default, add parens around the dates. If none are needed due to
% the context, use \BDNP.
%
\newif\ifBDParen
\starttexdefinition unexpanded BD
\BDParentrue
\dodoublegroupempty
\doBD
\stoptexdefinition
\starttexdefinition unexpanded BDNP
\BDParenfalse
\dodoublegroupempty
\doBD
\stoptexdefinition
\starttexdefinition doBD #1#2
\removeunwantedspaces\
\ifBDParen(\fi
\ifsecondargument
#1|–|#2
\else\iffirstargument
#1–
\else
{\red I NEED A DATE OR DATES!}
\fi\fi
\ifBDParen)\fi
\autoinsertedspace
\stoptexdefinition
Both call the same doBD, but they set a flag (newif) to control
insertion or not of the parens. While there is no performance benefit
compared to having two fully separate macros, there is a maintenance
benefit in having only one place, doBD, to make changes should they be
required.
Can you suggest a way to do this under the new one-step scheme, or am I
over-thinking this?
Finally, is there any reason to go back to previously written and
properly functioning macros and convert them to the LMTX-only syntax? It
does imply committing to LMTX-only (or
--
Rik
[-- Attachment #1.2: Type: text/html, Size: 4312 bytes --]
[-- Attachment #2: Type: text/plain, Size: 496 bytes --]
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / https://www.ntg.nl/mailman/listinfo/ntg-context
webpage : https://www.pragma-ade.nl / http://context.aanhet.net
archive : https://bitbucket.org/phg/context-mirror/commits/
wiki : https://contextgarden.net
___________________________________________________________________________________
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: \autoinsertedspace fails
2023-01-06 2:05 ` Rik Kabel via ntg-context
@ 2023-01-06 7:53 ` Hans Hagen via ntg-context
0 siblings, 0 replies; 8+ messages in thread
From: Hans Hagen via ntg-context @ 2023-01-06 7:53 UTC (permalink / raw)
To: Rik Kabel via ntg-context; +Cc: Hans Hagen
On 1/6/2023 3:05 AM, Rik Kabel via ntg-context wrote:
>
> On 2023-01-05 04:35, Hans Hagen via ntg-context wrote:
>> On 1/5/2023 4:21 AM, Rik Kabel via ntg-context wrote:
>
> [ snipped by rik]
>
>> Here is a more lmtx-ish variant:
>>
>> \starttexdefinition tolerant protected BD #=#*#=
>> \removeunwantedspaces
>> \space % insert a space
>> (
>> \ifparameter#2\or
>> #1|–|#2
>> \orelse\ifparameter#1\or
>> #1–
>> \else
>> {\red I NEED A DATE OR DATES!}
>> \fi
>> )
>> \autoinsertedspace
>> \stoptexdefinition
>>
>> Hans
>
> Thank you for that. This works for me with \optionalspace, but fails in
> some cases with \autoinsertedspace.
>
> I have now re-read lowlevel-macros.pdf and have a better understanding
> of what I read when first I approached it; I still have a way to go.
>
> /Tolerant/ removes the need for /dodoubleempty/ and friends and the
> two-step /macro/ and /doMacro/ dance. There was a small advantage to the
> two-step, however. I had two separate macros, BD and BDNP (no parens),
> as shown.
>
> The old code in full was:
>
> %-------------------- Birth and death dates -----------------------%
> % Ferdinand de Saussure\BD{1857}{1913}
> % Noam Chomsky \BD{1928}
> %
> % Perhaps this could be tied to an acronym-like database so that the
> % dates are printed only once per person.
> % \removeunwantedspaces allows this to directly follow, or follow
> % after whitespace, the associated name: Name\BD{1}{2} or
> % Name \BD{1}{2}.
> % Using the compound indication (|–|) allows hyphenation after the
> % endash. Omitting it and using a bare endash inhibits hyphenation
> % ‘twixt the endash and the paren.
> % By default, add parens around the dates. If none are needed due to
> % the context, use \BDNP.
> %
> \newif\ifBDParen
> \starttexdefinition unexpanded BD
> \BDParentrue
> \dodoublegroupempty
> \doBD
> \stoptexdefinition
> \starttexdefinition unexpanded BDNP
> \BDParenfalse
> \dodoublegroupempty
> \doBD
> \stoptexdefinition
> \starttexdefinition doBD #1#2
> \removeunwantedspaces\
> \ifBDParen(\fi
> \ifsecondargument
> #1|–|#2
> \else\iffirstargument
> #1–
> \else
> {\red I NEED A DATE OR DATES!}
> \fi\fi
> \ifBDParen)\fi
> \autoinsertedspace
> \stoptexdefinition
>
> Both call the same doBD, but they set a flag (newif) to control
> insertion or not of the parens. While there is no performance benefit
> compared to having two fully separate macros, there is a maintenance
> benefit in having only one place, doBD, to make changes should they be
> required.
>
> Can you suggest a way to do this under the new one-step scheme, or am I
> over-thinking this?
just remove the #* in the example i sent,
\starttexdefinition tolerant protected BD #=#=
Hans
-----------------------------------------------------------------
Hans Hagen | PRAGMA ADE
Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
tel: 038 477 53 69 | www.pragma-ade.nl | 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 / https://www.ntg.nl/mailman/listinfo/ntg-context
webpage : https://www.pragma-ade.nl / http://context.aanhet.net
archive : https://bitbucket.org/phg/context-mirror/commits/
wiki : https://contextgarden.net
___________________________________________________________________________________
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2023-01-06 7:53 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-12-30 0:12 \autoinsertedspace fails Rik Kabel via ntg-context
2023-01-04 22:10 ` Rik Kabel via ntg-context
2023-01-04 23:45 ` Hans Hagen via ntg-context
2023-01-05 3:21 ` Rik Kabel via ntg-context
2023-01-05 7:38 ` Hans Hagen via ntg-context
2023-01-05 9:35 ` Hans Hagen via ntg-context
2023-01-06 2:05 ` Rik Kabel via ntg-context
2023-01-06 7:53 ` Hans Hagen via ntg-context
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).