On 8/13/2023 12:56 AM, Hamid,Idris wrote:
On Aug 12, 2023, 4:20 PM -0600, Hans Hagen <j.ha...@xs4all.nl>, wrote:
btw, no need for squeezine as there are virtual commands for scaling; not for
rotating
From your original CLD template:
local function topthing(characters,target,base,accent)
-- if not characters[target] then
local data1 = characters[base]
local data2 = characters[accent]
if data1 and data2 then
characters[target] = { -- "Ḥ"
height = (data1.height or 0) + 0.5*(data2.height or 0),
depth = data1.depth,
width = data1.width,
unicode = target,
commands = {
{ "slot", 0, 0x048 },
{ "left", 0.5*(data2.width or 0) + 0.5*(data1.width or
0) },
{ "up", 0.5*(data2.height or 0) },
{ "slot", 0, 0x2D9, },
},
}
end
-- end
end
a little lesson in efficiency attached
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
-----------------------------------------------------------------
\startluacode
-- Ṯṯ Ḥḥ Ḫḫ Ḏḏ Šš Ṣṣ Ḍḍ Ṭṭ Ẓẓ Ġġ Āā Īī Ūū ʿ ʾ
local function process(characters,target,value)
if value == "force" then
return true
elseif characters[target] then
return false
else
return true
end
end
local function below(characters,value,target,base,accent,left,down,depth)
if process(characters,target,value) then
local data1 = characters[base]
local data2 = characters[accent]
if data1 and data2 then
characters[target] = {
height = data1.height,
depth = depth*data2.height,
width = data1.width,
unicode = target,
commands = {
{ "slot", 0, base },
{ "left", left*(data2.width or 0) + 0.5*(data1.width or
0) },
{ "down", down*(data2.height or 0) + (data2.height or
0) },
{ "slot", 0, accent },
},
}
end
end
end
local function ccrap(characters,value,target,base,template,scale,mirror)
if process(characters,target,value) then
local data1 = characters[base]
local data2 = characters[template]
if data1 and data2 then
local height1 = data1.height
local height2 = data2.height
local width1 = scale * data1.width
characters[target] = {
height = height2,
depth = 0,
width = width1,
unicode = target,
commands = {
{
"offset",
mirror and width1 or 0,
height2 - (mirror and 0 or scale*height1),
base,
mirror and -scale or scale,
mirror and -scale or scale
},
},
}
end
end
end
-- in principle one can have some extra parameters for shifts but this
-- is suboptimal anyway and only meant for minion
local function initialize(tfmdata,feature,value)
if value then
local characters = tfmdata.characters
below (characters,value,0x1E6E,0x054,0x0AF,0.50,0.07,0.20) -- Tlinebelow
below (characters,value,0x1E6F,0x074,0x0AF,0.45,0.07,0.20) -- tlinebelow
below (characters,value,0x1E24,0x048,0x2D9,0.50,0.10,0.30) -- Hdotbelow
below (characters,value,0x1E25,0x068,0x2D9,0.50,0.10,0.30) -- hdotbelow
below (characters,value,0x1E2A,0x048,0x2D8,0.50,0.10,0.35) --
Hbrevebelow
below (characters,value,0x1E2B,0x068,0x2D8,0.50,0.10,0.35) --
hbrevebelow
below (characters,value,0x1E0E,0x044,0x0AF,0.50,0.07,0.20) -- Dlinebelow
below (characters,value,0x1E0F,0x064,0x0AF,0.40,0.07,0.20) -- dlinebelow
below (characters,value,0x1E62,0x053,0x2D9,0.50,0.12,0.30) -- Sdotbelow
below (characters,value,0x1E63,0x073,0x2D9,0.40,0.12,0.30) -- sdotbelow
below (characters,value,0x1E0C,0x044,0x2D9,0.50,0.12,0.30) -- Ddotbelow
below (characters,value,0x1E0D,0x064,0x2D9,0.40,0.12,0.30) -- ddotbelow
below (characters,value,0x1E6C,0x054,0x2D9,0.50,0.12,0.30) -- Tdotbelow
below (characters,value,0x1E6D,0x074,0x2D9,0.40,0.12,0.30) -- tdotbelow
below (characters,value,0x1E92,0x05A,0x2D9,0.50,0.12,0.30) -- Zdotbelow
below (characters,value,0x1E93,0x07A,0x2D9,0.40,0.12,0.30) -- zdotbelow
ccrap (characters,value,0x02BE,0x063,0x043,0.5,false) -- some fake
ccrap (characters,value,0x02BF,0x063,0x043,0.5,true) -- some fake
end
end
local specification = {
name = "idrify",
description = "idrify",
manipulators = {
base = initialize,
node = initialize,
}
}
fonts.handlers.otf.features.register(specification)
\stopluacode
% \definefontfeature[default][default][idrify=yes]
\definefontfeature[default][default][idrify=force]
\showglyphs
\startTEXpage[offset=1ts]
\definedfont[MinionPro-Regular.otf*default @ 12pt]%
Ṯṯ Ḥḥ Ḫḫ Ḏḏ Šš Ṣṣ Ḍḍ Ṭṭ Ẓẓ Ġġ Āā Īī Ūū ʿ ʾ
\stopTEXpage
\stoptext
___________________________________________________________________________________
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
___________________________________________________________________________________