diff options
| author | Khaled Hosny <khaledhosny@eglug.org> | 2010-02-12 15:04:43 +0200 | 
|---|---|---|
| committer | Khaled Hosny <khaledhosny@eglug.org> | 2010-02-12 15:33:59 +0200 | 
| commit | fc4ceb016698207125b66ab35af1e306b117993c (patch) | |
| tree | 5bac6dff43e898a10ab81e6444edb2cb564939f0 | |
| parent | 692db6a1047a6a16b8a06accbcc8007d2a72aa7a (diff) | |
| download | luaotfload-fc4ceb016698207125b66ab35af1e306b117993c.tar.gz | |
Updating to latest ConTeXt beta (2010.02.12)
This introduces microtypography support.
Test:
     \input luaotfload.sty
     \pdfprotrudechars2 \pdfadjustspacing2
     \font\testa=file:lmroman12-regular:script=latn at 12pt
     \font\testb=file:lmroman12-regular:script=latn;protrusion=default at 12pt
     \testa \input tufte \par
     \testb \input tufte \par
     \bye
closes #7
| -rw-r--r-- | News | 3 | ||||
| -rw-r--r-- | otfl-font-dum.lua | 131 | ||||
| -rw-r--r-- | otfl-font-msc.lua | 44 | 
3 files changed, 133 insertions, 45 deletions
@@ -1,7 +1,8 @@                          History of the luaotfload bundle  Currrent git, luaotfload v1.07: -    * synchronizing with latest ConTeXt beta 2010.02.03 +    * synchronizing with latest ConTeXt beta 2010.02.12 +    * adding support for microtypography      * adding support for color and transparency      * adding a script to generate a font database with TeX and system fonts      * more verbose log file diff --git a/otfl-font-dum.lua b/otfl-font-dum.lua index 9b04b86..94dc676 100644 --- a/otfl-font-dum.lua +++ b/otfl-font-dum.lua @@ -154,5 +154,136 @@ end  fonts.initializers.base.otf.itlc = itlc  fonts.initializers.node.otf.itlc = itlc +-- slant and extend + +function fonts.initializers.common.slant(tfmdata,value) +    value = tonumber(value) +    if not value then +        value =  0 +    elseif value >  1 then +        value =  1 +    elseif value < -1 then +        value = -1 +    end +    tfmdata.slant_factor = value +end + +function fonts.initializers.common.extend(tfmdata,value) +    value = tonumber(value) +    if not value then +        value =  0 +    elseif value >  10 then +        value =  10 +    elseif value < -10 then +        value = -10 +    end +    tfmdata.extend_factor = value +end + +table.insert(fonts.triggers,"slant") +table.insert(fonts.triggers,"extend") + +fonts.initializers.base.otf.slant  = fonts.initializers.common.slant +fonts.initializers.node.otf.slant  = fonts.initializers.common.slant +fonts.initializers.base.otf.extend = fonts.initializers.common.extend +fonts.initializers.node.otf.extend = fonts.initializers.common.extend + +-- expansion and protrusion + +fonts.protrusions        = fonts.protrusions        or { } +fonts.protrusions.setups = fonts.protrusions.setups or { } + +local setups  = fonts.protrusions.setups + +function fonts.initializers.common.protrusion(tfmdata,value) +    if value then +        local setup = setups[value] +        if setup then +            local factor, left, right = setup.factor or 1, setup.left or 1, setup.right or 1 +            local emwidth = tfmdata.parameters.quad +            tfmdata.auto_protrude = true +            for i, chr in next, tfmdata.characters do +                local v, pl, pr = setup[i], nil, nil +                if v then +                    pl, pr = v[1], v[2] +                end +                if pl and pl ~= 0 then chr.left_protruding  = left *pl*factor end +                if pr and pr ~= 0 then chr.right_protruding = right*pr*factor end +            end +        end +    end +end + +fonts.expansions         = fonts.expansions        or { } +fonts.expansions.setups  = fonts.expansions.setups or { } + +local setups = fonts.expansions.setups + +function fonts.initializers.common.expansion(tfmdata,value) +    if value then +        local setup = setups[value] +        if setup then +            local stretch, shrink, step, factor = setup.stretch or 0, setup.shrink or 0, setup.step or 0, setup.factor or 1 +            tfmdata.stretch, tfmdata.shrink, tfmdata.step, tfmdata.auto_expand = stretch * 10, shrink * 10, step * 10, true +            for i, chr in next, tfmdata.characters do +                local v = setup[i] +                if v and v ~= 0 then +                    chr.expansion_factor = v*factor +                else -- can be option +                    chr.expansion_factor = factor +                end +            end +        end +    end +end + +table.insert(fonts.manipulators,"protrusion") +table.insert(fonts.manipulators,"expansion") + +fonts.initializers.base.otf.protrusion = fonts.initializers.common.protrusion +fonts.initializers.node.otf.protrusion = fonts.initializers.common.protrusion +fonts.initializers.base.otf.expansion  = fonts.initializers.common.expansion +fonts.initializers.node.otf.expansion  = fonts.initializers.common.expansion + +-- left over +  function fonts.register_message()  end + +-- example vectors + +local byte = string.byte + +fonts.expansions.setups['default'] = { + +    stretch = 2, shrink = 2, step = .5, factor = 1, + +    [byte('A')] = 0.5, [byte('B')] = 0.7, [byte('C')] = 0.7, [byte('D')] = 0.5, [byte('E')] = 0.7, +    [byte('F')] = 0.7, [byte('G')] = 0.5, [byte('H')] = 0.7, [byte('K')] = 0.7, [byte('M')] = 0.7, +    [byte('N')] = 0.7, [byte('O')] = 0.5, [byte('P')] = 0.7, [byte('Q')] = 0.5, [byte('R')] = 0.7, +    [byte('S')] = 0.7, [byte('U')] = 0.7, [byte('W')] = 0.7, [byte('Z')] = 0.7, +    [byte('a')] = 0.7, [byte('b')] = 0.7, [byte('c')] = 0.7, [byte('d')] = 0.7, [byte('e')] = 0.7, +    [byte('g')] = 0.7, [byte('h')] = 0.7, [byte('k')] = 0.7, [byte('m')] = 0.7, [byte('n')] = 0.7, +    [byte('o')] = 0.7, [byte('p')] = 0.7, [byte('q')] = 0.7, [byte('s')] = 0.7, [byte('u')] = 0.7, +    [byte('w')] = 0.7, [byte('z')] = 0.7, +    [byte('2')] = 0.7, [byte('3')] = 0.7, [byte('6')] = 0.7, [byte('8')] = 0.7, [byte('9')] = 0.7, +} + +fonts.protrusions.setups['default'] = { + +    factor = 1, left = 1, right = 1, + +    [0x002C] = { 0, 1    }, -- comma +    [0x002E] = { 0, 1    }, -- period +    [0x003A] = { 0, 1    }, -- colon +    [0x003B] = { 0, 1    }, -- semicolon +    [0x002D] = { 0, 1    }, -- hyphen +    [0x2013] = { 0, 0.50 }, -- endash +    [0x2014] = { 0, 0.33 }, -- emdash +    [0x3001] = { 0, 1    }, -- ideographic comma      、 +    [0x3002] = { 0, 1    }, -- ideographic full stop  。 +    [0x060C] = { 0, 1    }, -- arabic comma           ، +    [0x061B] = { 0, 1    }, -- arabic semicolon       ؛ +    [0x06D4] = { 0, 1    }, -- arabic full stop       ۔ + +} diff --git a/otfl-font-msc.lua b/otfl-font-msc.lua index cc16d3d..d7cfe20 100644 --- a/otfl-font-msc.lua +++ b/otfl-font-msc.lua @@ -7,50 +7,6 @@ if not modules then modules = { } end modules ['font-msc'] = {  }  --[[ - Support for font slanting and extending. ---]] - -fonts.triggers            = fonts.triggers            or { } -fonts.initializers        = fonts.initializers        or { } -fonts.initializers.common = fonts.initializers.common or { } - -local initializers, format = fonts.initializers, string.format - -table.insert(fonts.triggers,"slant") - -function fonts.initializers.common.slant(tfmdata,value) -    value = tonumber(value) -    if not value then -        value =  0 -    elseif value >  1 then -        value =  1 -    elseif value < -1 then -        value = -1 -    end -    tfmdata.slant_factor = value -end - -initializers.base.otf.slant = initializers.common.slant -initializers.node.otf.slant = initializers.common.slant - -table.insert(fonts.triggers,"extend") - -function initializers.common.extend(tfmdata,value) -    value = tonumber(value) -    if not value then -        value =  0 -    elseif value >  10 then -        value =  10 -    elseif value < -10 then -        value = -10 -    end -    tfmdata.extend_factor = value -end - -initializers.base.otf.extend = initializers.common.extend -initializers.node.otf.extend = initializers.common.extend - ---[[    Support for font color.  --]]  | 
