Re: [NTG-context] Adjust kern for one character

2019-12-26 Thread Rik Kabel


On 12/26/2019 08:40, Hans Hagen wrote:

On 12/26/2019 1:41 PM, Rik Kabel wrote:

Okay, I have progressed further but have run into something (else) I 
cannot understand. Consider the following example:


    \definefontfeature   [myserif] [mode=node,kern=yes,xkern=yes]
    \definefontfeature   [mysans]  [mode=node,kern=yes,xkern=no]
    \definefontfeature   [none]    [mode=node]
    \definefontfamily    [mykerns] [serif] [Baskervaldx] 
[features=myserif]
    \definefontfamily    [mykerns] [sans]  [Dejavusans] 
[features=mysans]
    \definefontfamily    [default] [serif] [Baskervaldx] 
[features=default]
    \definefontfamily    [default] [sans]  [Dejavusans] 
[features=default]

    \definefontfamily    [nokerns] [serif] [Baskervaldx] [features=none]
    \definefontfamily    [nokerns] [sans]  [Dejavusans] [features=none]
    \definefontfamily    [legends] [mono]  [Dejavusansmono] 
[features=default]


    \startluacode
   fonts.handlers.otf.addfeature {
   name = "kern",
   type = "kern",
   data = {
   ["x"] = { ["x"] = -300 },
   [" "] = { ["A"] = 1000 }
   }
   }
   fonts.handlers.otf.addfeature {
   name = "xkern",
   type = "kern",
   data = {
   ["x"] = { ["x"] = 500 },
   [" "] = { ["J"] = 500 }
   }
   }
    \stopluacode

    \startbuffer[Sample]
   g, Jaxxb AJon
    \stopbuffer

    \define[2]\Test{
   {\switchtobodyfont[#1]#2\getbuffer[Sample]}}

    \setupbodyfont[legends]

    \starttext
    \starttabulate[|l|l|l|]
    \NC test \NC  Serif    \NC Sans 
\NC \NR
    \NC nokerns  \NC  \Test{nokerns}{\tf}  \NC \Test{nokerns}{\ss}  
\NC \NR
    \NC default  \NC  \Test{default}{\tf}  \NC \Test{default}{\ss}  
\NC \NR
    \NC mykerns  \NC  \Test{mykerns}{\tf}  \NC \Test{mykerns}{\ss}  
\NC \NR

    \stoptabulate
    \stoptext

It shows, as far as I see, that the kern feature type supports " ", 
but only when it is named kern. When it is named xkern, as here, it 
does not support spaces, but does support other characters.
Indeed it's currently bound to 'kern' (mostly for convenience and a 
little for performance) but it's not that hard to make it a bit more 
flexible (but not today).


Hans


Thank you for the confirmation. I look forward to the update.

--
Rik

___
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://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki : http://contextgarden.net
___


Re: [NTG-context] Adjust kern for one character

2019-12-26 Thread Hans Hagen

On 12/26/2019 1:41 PM, Rik Kabel wrote:

Okay, I have progressed further but have run into something (else) I 
cannot understand. Consider the following example:


\definefontfeature   [myserif] [mode=node,kern=yes,xkern=yes]
\definefontfeature   [mysans]  [mode=node,kern=yes,xkern=no]
\definefontfeature   [none][mode=node]
\definefontfamily[mykerns] [serif] [Baskervaldx][features=myserif]
\definefontfamily[mykerns] [sans]  [Dejavusans] [features=mysans]
\definefontfamily[default] [serif] [Baskervaldx][features=default]
\definefontfamily[default] [sans]  [Dejavusans] [features=default]
\definefontfamily[nokerns] [serif] [Baskervaldx][features=none]
\definefontfamily[nokerns] [sans]  [Dejavusans] [features=none]
\definefontfamily[legends] [mono]  [Dejavusansmono] [features=default]

\startluacode
   fonts.handlers.otf.addfeature {
   name = "kern",
   type = "kern",
   data = {
   ["x"] = { ["x"] = -300 },
   [" "] = { ["A"] = 1000 }
   }
   }
   fonts.handlers.otf.addfeature {
   name = "xkern",
   type = "kern",
   data = {
   ["x"] = { ["x"] = 500 },
   [" "] = { ["J"] = 500 }
   }
   }
\stopluacode

\startbuffer[Sample]
   g, Jaxxb AJon
\stopbuffer

\define[2]\Test{
   {\switchtobodyfont[#1]#2\getbuffer[Sample]}}

\setupbodyfont[legends]

\starttext
\starttabulate[|l|l|l|]
\NC test \NC  Serif\NC  Sans \NC \NR
\NC nokerns  \NC  \Test{nokerns}{\tf}  \NC  \Test{nokerns}{\ss}  \NC \NR
\NC default  \NC  \Test{default}{\tf}  \NC  \Test{default}{\ss}  \NC \NR
\NC mykerns  \NC  \Test{mykerns}{\tf}  \NC  \Test{mykerns}{\ss}  \NC \NR
\stoptabulate
\stoptext

It shows, as far as I see, that the kern feature type supports " ", but 
only when it is named kern. When it is named xkern, as here, it does not 
support spaces, but does support other characters.
Indeed it's currently bound to 'kern' (mostly for convenience and a 
little for performance) but it's not that hard to make it a bit more 
flexible (but not today).


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 / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki : http://contextgarden.net
___


Re: [NTG-context] Adjust kern for one character

2019-12-26 Thread Rik Kabel


On 12/23/2019 18:45, Rik Kabel wrote:


On 12/22/2019 21:34, Henri Menke wrote:



On 12/23/19 3:33 PM, Henri Menke wrote:

On 12/23/19 2:30 PM, Rik Kabel wrote:


On 12/22/2019 17:40, mf wrote:

Il 22/12/19 22:19, Rik Kabel ha scritto:

List,

Is there a way in ConTeXt to adjust the left-side kern for one
character? The cap J in the font I am using is being set too 
close to

the preceding characters and I would rather not insert a thinspace
before each. (Inserting a thinspace is sufficient, but finer control
is welcome.)


\definecharacterspacing[distantJ]
\setupcharacterspacing[distantJ]["004A][left=.15,alternative=1] % 
004A

is the unicode hex index of letter J
\starttext
    normal: AJB\par
    \setcharacterspacing[distantJ] more space on the left: AJB\par
    \resetcharacterspacing normal again: AJB\par
\stoptext


Thank you for that, Massi.

Unfortunately, that is too blunt an instrument in this case -- in
addition to the body font where the problem exists, it works on the
heading and titling font, which does not share the problem.

As Henri's answer hints, I was a bit unclear in my request. It is a 
kern

between a word space and the cap J that is the issue. Perhaps a font
feature file is the place to do such a thing.


\startluacode
fonts.handlers.otf.addfeature {
  name = "kern",
  type = "kern",
  data = {
  [" "] = {
  ["J"] = 1000 % exaggerated value


Should of course be a Lua comment

    ["J"] = 1000 -- exaggerated value


  }
  }
}
\stopluacode

\setupbodyfont[modern] % have to reload the font

\starttext

No Jokes!

\stoptext


Henri,

This looks very promising. It works, mostly. That is, all fonts that 
use default fontfeatures pick up the change. So, for example, the 
companion sansserif for my body font also gets it even though that is 
not what I want.


I can remove kerning from the default fontfeatures and add it back 
just for the problematic font, but that means no kerning for the sans 
font.


Is there a way to apply this to one font only (serif upright, bold, 
italic, ...) or even a single face (upright), perhaps by giving it a 
unique name? I have tried a few variations but had no success. The 
fonts-mkiv manual has very little on this, and the cld manual nothing.


Okay, I have progressed further but have run into something (else) I 
cannot understand. Consider the following example:


   \definefontfeature   [myserif] [mode=node,kern=yes,xkern=yes]
   \definefontfeature   [mysans]  [mode=node,kern=yes,xkern=no]
   \definefontfeature   [none][mode=node]
   \definefontfamily[mykerns] [serif] [Baskervaldx][features=myserif]
   \definefontfamily[mykerns] [sans]  [Dejavusans] [features=mysans]
   \definefontfamily[default] [serif] [Baskervaldx][features=default]
   \definefontfamily[default] [sans]  [Dejavusans] [features=default]
   \definefontfamily[nokerns] [serif] [Baskervaldx][features=none]
   \definefontfamily[nokerns] [sans]  [Dejavusans] [features=none]
   \definefontfamily[legends] [mono]  [Dejavusansmono] [features=default]

   \startluacode
  fonts.handlers.otf.addfeature {
  name = "kern",
  type = "kern",
  data = {
  ["x"] = { ["x"] = -300 },
  [" "] = { ["A"] = 1000 }
  }
  }
  fonts.handlers.otf.addfeature {
  name = "xkern",
  type = "kern",
  data = {
  ["x"] = { ["x"] = 500 },
  [" "] = { ["J"] = 500 }
  }
  }
   \stopluacode

   \startbuffer[Sample]
  g, Jaxxb AJon
   \stopbuffer

   \define[2]\Test{
  {\switchtobodyfont[#1]#2\getbuffer[Sample]}}

   \setupbodyfont[legends]

   \starttext
   \starttabulate[|l|l|l|]
   \NC test \NC  Serif\NC  Sans \NC \NR
   \NC nokerns  \NC  \Test{nokerns}{\tf}  \NC  \Test{nokerns}{\ss}  \NC \NR
   \NC default  \NC  \Test{default}{\tf}  \NC  \Test{default}{\ss}  \NC \NR
   \NC mykerns  \NC  \Test{mykerns}{\tf}  \NC  \Test{mykerns}{\ss}  \NC \NR
   \stoptabulate
   \stoptext

It shows, as far as I see, that the kern feature type supports " ", but 
only when it is named kern. When it is named xkern, as here, it does not 
support spaces, but does support other characters.


If I can get support for a separate feature name, I can easily apply 
this corrective kern to the single problematic font.


I also tried a goodie file, but it, too, did not support the " ".

--
Rik

___
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://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki : http://contextgarden.net

Re: [NTG-context] Adjust kern for one character

2019-12-23 Thread Rik Kabel


On 12/22/2019 21:34, Henri Menke wrote:



On 12/23/19 3:33 PM, Henri Menke wrote:

On 12/23/19 2:30 PM, Rik Kabel wrote:


On 12/22/2019 17:40, mf wrote:

Il 22/12/19 22:19, Rik Kabel ha scritto:

List,

Is there a way in ConTeXt to adjust the left-side kern for one
character? The cap J in the font I am using is being set too close to
the preceding characters and I would rather not insert a thinspace
before each. (Inserting a thinspace is sufficient, but finer control
is welcome.)


\definecharacterspacing[distantJ]
\setupcharacterspacing[distantJ]["004A][left=.15,alternative=1] % 004A
is the unicode hex index of letter J
\starttext
    normal: AJB\par
    \setcharacterspacing[distantJ] more space on the left: AJB\par
    \resetcharacterspacing normal again: AJB\par
\stoptext


Thank you for that, Massi.

Unfortunately, that is too blunt an instrument in this case -- in
addition to the body font where the problem exists, it works on the
heading and titling font, which does not share the problem.

As Henri's answer hints, I was a bit unclear in my request. It is a 
kern

between a word space and the cap J that is the issue. Perhaps a font
feature file is the place to do such a thing.


\startluacode
fonts.handlers.otf.addfeature {
  name = "kern",
  type = "kern",
  data = {
  [" "] = {
  ["J"] = 1000 % exaggerated value


Should of course be a Lua comment

    ["J"] = 1000 -- exaggerated value


  }
  }
}
\stopluacode

\setupbodyfont[modern] % have to reload the font

\starttext

No Jokes!

\stoptext


Henri,

This looks very promising. It works, mostly. That is, all fonts that use 
default fontfeatures pick up the change. So, for example, the companion 
sansserif for my body font also gets it even though that is not what I want.


I can remove kerning from the default fontfeatures and add it back just 
for the problematic font, but that means no kerning for the sans font.


Is there a way to apply this to one font only (serif upright, bold, 
italic, ...) or even a single face (upright), perhaps by giving it a 
unique name? I have tried a few variations but had no success. The 
fonts-mkiv manual has very little on this, and the cld manual nothing.


--
Rik

___
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://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki : http://contextgarden.net
___


Re: [NTG-context] Adjust kern for one character

2019-12-23 Thread Hans Hagen

On 12/23/2019 10:13 AM, Mojca Miklavec wrote:

On Sun, 22 Dec 2019 at 22:28, Henri Menke wrote:

On 12/23/19 10:19 AM, Rik Kabel wrote:

List,

Is there a way in ConTeXt to adjust the left-side kern for one
character?


No, kerns always come in pairs.


Bounding boxes come per-character, though ;)
I'm not familiar with details, but I would guess that it might be
possible to change the bounding box of a character on the fly.
you can tweak the width when you load, boundingboxes can only be used 
for height and depth guessing (fonts provide width information)


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 / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki : http://contextgarden.net
___


Re: [NTG-context] Adjust kern for one character

2019-12-23 Thread Mojca Miklavec
On Sun, 22 Dec 2019 at 22:28, Henri Menke wrote:
> On 12/23/19 10:19 AM, Rik Kabel wrote:
> > List,
> >
> > Is there a way in ConTeXt to adjust the left-side kern for one
> > character?
>
> No, kerns always come in pairs.

Bounding boxes come per-character, though ;)
I'm not familiar with details, but I would guess that it might be
possible to change the bounding box of a character on the fly.

Mojca
___
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://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki : http://contextgarden.net
___


Re: [NTG-context] Adjust kern for one character

2019-12-22 Thread Henri Menke



On 12/23/19 3:33 PM, Henri Menke wrote:

On 12/23/19 2:30 PM, Rik Kabel wrote:


On 12/22/2019 17:40, mf wrote:

Il 22/12/19 22:19, Rik Kabel ha scritto:

List,

Is there a way in ConTeXt to adjust the left-side kern for one
character? The cap J in the font I am using is being set too close to
the preceding characters and I would rather not insert a thinspace
before each. (Inserting a thinspace is sufficient, but finer control
is welcome.)


\definecharacterspacing[distantJ]
\setupcharacterspacing[distantJ]["004A][left=.15,alternative=1] % 004A
is the unicode hex index of letter J
\starttext
    normal: AJB\par
    \setcharacterspacing[distantJ] more space on the left: AJB\par
    \resetcharacterspacing normal again: AJB\par
\stoptext


Thank you for that, Massi.

Unfortunately, that is too blunt an instrument in this case -- in
addition to the body font where the problem exists, it works on the
heading and titling font, which does not share the problem.

As Henri's answer hints, I was a bit unclear in my request. It is a kern
between a word space and the cap J that is the issue. Perhaps a font
feature file is the place to do such a thing.


\startluacode
fonts.handlers.otf.addfeature {
  name = "kern",
  type = "kern",
  data = {
  [" "] = {
  ["J"] = 1000 % exaggerated value


Should of course be a Lua comment

["J"] = 1000 -- exaggerated value


  }
  }
}
\stopluacode

\setupbodyfont[modern] % have to reload the font

\starttext

No Jokes!

\stoptext


___
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://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki : http://contextgarden.net
___


Re: [NTG-context] Adjust kern for one character

2019-12-22 Thread Henri Menke

On 12/23/19 2:30 PM, Rik Kabel wrote:


On 12/22/2019 17:40, mf wrote:

Il 22/12/19 22:19, Rik Kabel ha scritto:

List,

Is there a way in ConTeXt to adjust the left-side kern for one
character? The cap J in the font I am using is being set too close to
the preceding characters and I would rather not insert a thinspace
before each. (Inserting a thinspace is sufficient, but finer control
is welcome.)


\definecharacterspacing[distantJ]
\setupcharacterspacing[distantJ]["004A][left=.15,alternative=1] % 004A
is the unicode hex index of letter J
\starttext
   normal: AJB\par
   \setcharacterspacing[distantJ] more space on the left: AJB\par
   \resetcharacterspacing normal again: AJB\par
\stoptext


Thank you for that, Massi.

Unfortunately, that is too blunt an instrument in this case -- in
addition to the body font where the problem exists, it works on the
heading and titling font, which does not share the problem.

As Henri's answer hints, I was a bit unclear in my request. It is a kern
between a word space and the cap J that is the issue. Perhaps a font
feature file is the place to do such a thing.


\startluacode
fonts.handlers.otf.addfeature {
name = "kern",
type = "kern",
data = {
[" "] = {
["J"] = 1000 % exaggerated value
}
}
}
\stopluacode

\setupbodyfont[modern] % have to reload the font

\starttext

No Jokes!

\stoptext
___
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://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki : http://contextgarden.net
___


Re: [NTG-context] Adjust kern for one character

2019-12-22 Thread Rik Kabel


On 12/22/2019 17:40, mf wrote:

Il 22/12/19 22:19, Rik Kabel ha scritto:

List,

Is there a way in ConTeXt to adjust the left-side kern for one 
character? The cap J in the font I am using is being set too close to 
the preceding characters and I would rather not insert a thinspace 
before each. (Inserting a thinspace is sufficient, but finer control 
is welcome.)



\definecharacterspacing[distantJ]
\setupcharacterspacing[distantJ]["004A][left=.15,alternative=1] % 004A 
is the unicode hex index of letter J

\starttext
  normal: AJB\par
  \setcharacterspacing[distantJ] more space on the left: AJB\par
  \resetcharacterspacing normal again: AJB\par
\stoptext


Thank you for that, Massi.

Unfortunately, that is too blunt an instrument in this case -- in 
addition to the body font where the problem exists, it works on the 
heading and titling font, which does not share the problem.


As Henri's answer hints, I was a bit unclear in my request. It is a kern 
between a word space and the cap J that is the issue. Perhaps a font 
feature file is the place to do such a thing.


--
Rik

___
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://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki : http://contextgarden.net
___


Re: [NTG-context] Adjust kern for one character

2019-12-22 Thread mf

Il 22/12/19 22:19, Rik Kabel ha scritto:

List,

Is there a way in ConTeXt to adjust the left-side kern for one 
character? The cap J in the font I am using is being set too close to 
the preceding characters and I would rather not insert a thinspace 
before each. (Inserting a thinspace is sufficient, but finer control is 
welcome.)



\definecharacterspacing[distantJ]
\setupcharacterspacing[distantJ]["004A][left=.15,alternative=1] % 004A 
is the unicode hex index of letter J

\starttext
  normal: AJB\par
  \setcharacterspacing[distantJ] more space on the left: AJB\par
  \resetcharacterspacing normal again: AJB\par
\stoptext
___
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://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki : http://contextgarden.net
___


Re: [NTG-context] Adjust kern for one character

2019-12-22 Thread Henri Menke

On 12/23/19 10:19 AM, Rik Kabel wrote:

List,

Is there a way in ConTeXt to adjust the left-side kern for one 
character?


No, kerns always come in pairs.


The cap J in the font I am using is being set too close to
the preceding characters and I would rather not insert a thinspace 
before each. (Inserting a thinspace is sufficient, but finer control

is welcome.)


___
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://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki : http://contextgarden.net
___


[NTG-context] Adjust kern for one character

2019-12-22 Thread Rik Kabel

List,

Is there a way in ConTeXt to adjust the left-side kern for one 
character? The cap J in the font I am using is being set too close to 
the preceding characters and I would rather not insert a thinspace 
before each. (Inserting a thinspace is sufficient, but finer control is 
welcome.)


--
Rik

___
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://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki : http://contextgarden.net
___