MFLua 0.8 Variable fonts 1/25 ConT EXt meeting 2017 Maibach - - PowerPoint PPT Presentation

mflua 0 8
SMART_READER_LITE
LIVE PREVIEW

MFLua 0.8 Variable fonts 1/25 ConT EXt meeting 2017 Maibach - - PowerPoint PPT Presentation

MFLua 0.8 Variable fonts 1/25 ConT EXt meeting 2017 Maibach MFLua 0.8 MFLUA A small superset of METAFONT; A METAFONT program can be executed unmodifjed by MFLUA, giving the same result if MFLUA doesnt use Lua


slide-1
SLIDE 1

ConT EXt meeting 2017 — Maibach MFLua 0.8

1/25

MFLua 0.8

Variable fonts

slide-2
SLIDE 2

ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8

2/25

MFLUA

  • A ‘small’ superset of METAFONT;
  • A METAFONT program can be executed unmodifjed by

MFLUA, giving the same result if MFLUA doesn’t use Lua scripts.

  • A MFLUA program can be executed by METAFONT almost

without modifjcation, giving the same result if MFLUA doesn’t use Lua scripts.

slide-3
SLIDE 3

ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8

3/25

BachoT EX meeting 2017 — Bachotek MFLUA 0.8 BachoT EX meeting 2017 — Bachotek MFLUA 0.8 BachoT EX meeting 2017 — Bachotek MFLUA 0.8

3/23

LuaT EX, MetaPost and MFLUA

TeX Lua MPlib LuaTeX

CWEB CWEB C++ C ... ... C

<callbacks>

slide-4
SLIDE 4

ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8

4/25

BachoT EX meeting 2017 — Bachotek MFLUA 0.8 BachoT EX meeting 2017 — Bachotek MFLUA 0.8 BachoT EX meeting 2017 — Bachotek MFLUA 0.8 BachoT EX meeting 2017 — Bachotek MFLUA 0.8

4/23

LuaT EX, MetaPost and MFLUA

Lua METAPOST

CWEB

MPlib

CWEB C

slide-5
SLIDE 5

ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8

5/25

BachoT EX meeting 2017 — Bachotek MFLUA 0.8 BachoT EX meeting 2017 — Bachotek MFLUA 0.8 BachoT EX meeting 2017 — Bachotek MFLUA 0.8 BachoT EX meeting 2017 — Bachotek MFLUA 0.8 BachoT EX meeting 2017 — Bachotek MFLUA 0.8

5/23

LuaT EX, MetaPost and MFLUA

MFLua METAFONT

PASCALWEB

Lua

C runscript <sensors> PASCALWEB

slide-6
SLIDE 6

ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8

6/25

MFLUA

Why another implementation of METAFONT ?

  • The main output of METAFONT is a bitmap version of

the draw described by mathematical and vectorial instruc- tions;

  • but ``METAFONT works internally with outlines’’ (cubic

Bézier curve);

  • these outlines can be recorded in the log fjle, but their

post-processing is difgicult. MFLUA can save bitmap and curves into Lua tables — and these are easier to process.

slide-7
SLIDE 7

ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8

7/25

MFLUA

MFLUA can:

  • work with bitmaps and curves;
  • use Lua to connect METAFONT to a (C) external library

(i.e. GUI library);

  • use Lua to export the curves into a font format;
  • use Lua to enhance the math of METAFONT (by default

the math of libc).

slide-8
SLIDE 8

ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8

8/25

MFLUA

Callback vs. sensor:

  • LuaTEX uses callbacks, i.e. functions that can read and

modify the state of TEX; it’s written in CWEB.

  • MFLUA uses readonly callbacks (a.k.a. ‘sensors’): a Lua

script can only read a value from METAFONT but cannot modify it. The sensors are inserted modifying the original PASCAL source by mean of a change fjle. METAFONT and MFLUA are essentially the same program: MFLUA adds only one new primitive runscript to talk to the Lua interpreter .

slide-9
SLIDE 9

ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8

9/25

MFLUA

Example: putting a sensor around make_ellipse. In PASCAL the mfmua_ sensor looks like a PASCAL procedure:

@x [41.866] MFLua q:=make_ellipse(major_axis,minor_axis,theta); if (tx<>0)or(ty<>0) then @<Shift the coordinates of path |q|@>; @y mfluaPRE_make_ellipse(major_axis,minor_axis,theta,tx,ty,0); q:=make_ellipse(major_axis,minor_axis,theta); if (tx<>0)or(ty<>0) then @<Shift the coordinates of path |q|@>; mfluaPOST_make_ellipse(major_axis,minor_axis,theta,tx,ty,q); @z

slide-10
SLIDE 10

ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8

10/25

MFLUA

but it calls a C function, which pass the values to the Lua interpreter:

int mfluaPREmakeellipse(integer major_axis, integer minor_axis, integer theta, integer tx, integer ty,integer q) { lua_State *L; int res; L = Luas[0]; GETGLOBALTABLEMFLUA(mfluaPREmakeellipse); if (lua_istable(L, -1)) { lua_getfield(L,-1,"PRE_make_ellipse"); lua_pushnumber(L, major_axis); /* push 1st argument */ lua_pushnumber(L, minor_axis); /* push 2nd argument */ lua_pushnumber(L, theta); /* push 3th argument */ lua_pushnumber(L, tx); /* push 4th argument */ lua_pushnumber(L, ty); /* push 5th argument */ lua_pushnumber(L, q); /* push 6th argument */ /* do the call (6 arguments, 0 result) */ if(res = lua_pcall(L, 6, 1, 0)){ lua_pushstring(L,"error in PRE_make_ellipse:"); lua_swap(L);lua_concat (L, 2); priv_lua_reporterrors(L, res); } } lua_settop(L,0); return 0; }

slide-11
SLIDE 11

ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8

11/25

MFLUA

which in turn calls a function in the mflua.lua fjle:

local function PRE_make_ellipse(major_axis,minor_axis,theta, tx,ty,q) PRINTDBG("PRE_make_ellipse") end local function POST_make_ellipse(major_axis,minor_axis,theta, tx,ty,q) PRINTDBG("POST_make_ellipse") : res = res ..print_two(x_coord(p),y_coord(p)) p=link(p) if p==q then flag=false end end mflua.pen[res] = {print_two(major_axis,minor_axis), theta*(2^-20),print_two(tx,ty)} end

slide-12
SLIDE 12

ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8

12/25

MFLUA

The more important sensor is end_program, because it’s po- sitioned just before the natural exit point of METAFONT. At this point all the fjles are written, so the sensor can call a user function to process the data collected so far and can also read the gf and tfm fjle.

slide-13
SLIDE 13

ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8

13/25

MFLUA 0.8

Example of runscript:

numeric r; numeric t[]; r:=0; r:=runscript( "return (math.sqrt(5)*math.sqrt(3))" ); message "DEBUG r=" & decimal r; message ""; runscript( "local t={2.2,3.3,1.1}; "& "table.sort(t); "& "local s = 't[1]:=%f;t[2]:=%f;t[3]:=%f;' "& "return string.format(s,t[1],t[2],t[3]) " ); message "DEBUG t[]=" & decimal t[1] & "," & decimal t[2] & "," & decimal t[3]; message ""; end. DEBUG r=3.87299 DEBUG t[]=1.1,2.2,3.3

slide-14
SLIDE 14

ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8

14/25

MFLUA 0.8

Example of runscript and MFLUAJIT:

numeric r; r = runscript( "local ffi = require('ffi') " & char(10) & "ffi.cdef[[ " & char(10) & "double erf( double arg );" & char(10) & "]] " & char(10) & "return ffi.C.erf(-3) " ); message "DEBUG erf(-3)=" & decimal(r); end DEBUG erf(-3)=-0.99998

slide-15
SLIDE 15

ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8

15/25

MFLUA 0.8

BachoT EX meeting 2017 — Bachotek MFLUA 0.8 BachoT EX meeting 2017 — Bachotek MFLUA 0.8 BachoT EX meeting 2017 — Bachotek MFLUA 0.8 BachoT EX meeting 2017 — Bachotek MFLUA 0.8 BachoT EX meeting 2017 — Bachotek MFLUA 0.8 BachoT EX meeting 2017 — Bachotek MFLUA 0.8 BachoT EX meeting 2017 — Bachotek MFLUA 0.8 BachoT EX meeting 2017 — Bachotek MFLUA 0.8 BachoT EX meeting 2017 — Bachotek MFLUA 0.8 BachoT EX meeting 2017 — Bachotek MFLUA 0.8 BachoT EX meeting 2017 — Bachotek MFLUA 0.8 BachoT EX meeting 2017 — Bachotek MFLUA 0.8 BachoT EX meeting 2017 — Bachotek MFLUA 0.8 BachoT EX meeting 2017 — Bachotek MFLUA 0.8 BachoT EX meeting 2017 — Bachotek MFLUA 0.8

15/23

MFLUA 0.8

MFLUA was already used to produce an OpenType font, starting from the METAFONT sources of the concrete font. It was an experiment on using only Lua without touching the

  • riginal sources, and preserving the original curves (i.e. no

contours from the bitmap ala Potrace). The conclusion was that it takes too much to try to solve all the intersections, and the final result ended using ''per glyph'' ugly tricks. FontForge was used to convert from SVG to OpenType. (the text is typesets with the Concrete OpenType made with MFLUA)

slide-16
SLIDE 16

ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8

16/25

MFLUA 0.8

New in 0.8:

  • new sensors around make_spec: it’s now possible to store

the curves before the subdivision in quadrants;

  • cleanup of the code: all the sensors are now in mfmua.lua;
  • a new (experimental) backend, ttx.
slide-17
SLIDE 17

ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8

17/25

MFLUA 0.8

A difgerent approach:

  • use METAFONT to produce clean outlines (no pens!);
  • use Lua to build backends, no modifjcation of the outlines;
  • use an external program to translate the backend to OTF

. Currently there are two backends: svg and ttx.

slide-18
SLIDE 18

ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8

18/25

MFLUA 0.8

BachoT EX meeting 2017 — Bachotek MFLUA 0.8 BachoT EX meeting 2017 — Bachotek MFLUA 0.8 BachoT EX meeting 2017 — Bachotek MFLUA 0.8 BachoT EX meeting 2017 — Bachotek MFLUA 0.8 BachoT EX meeting 2017 — Bachotek MFLUA 0.8 BachoT EX meeting 2017 — Bachotek MFLUA 0.8 BachoT EX meeting 2017 — Bachotek MFLUA 0.8 BachoT EX meeting 2017 — Bachotek MFLUA 0.8 BachoT EX meeting 2017 — Bachotek MFLUA 0.8 BachoT EX meeting 2017 — Bachotek MFLUA 0.8 BachoT EX meeting 2017 — Bachotek MFLUA 0.8 BachoT EX meeting 2017 — Bachotek MFLUA 0.8 BachoT EX meeting 2017 — Bachotek MFLUA 0.8 BachoT EX meeting 2017 — Bachotek MFLUA 0.8 BachoT EX meeting 2017 — Bachotek MFLUA 0.8 BachoT EX meeting 2017 — Bachotek MFLUA 0.8 BachoT EX meeting 2017 — Bachotek MFLUA 0.8 BachoT EX meeting 2017 — Bachotek MFLUA 0.8

18/23

MFLUA 0.8

The sourcecode-regular font by C. Vincoletto is a METAFONT font built in two months to test the MFLUA new backends. The end_program sensor translate the data to svg and a FontForge script (almost equal to that one used by mf2pt1) translates the svg font into an OTF. The font was also used to test the new ttx backend: the ttx

  • utput can be converted to an OTF font, and this

can be converted again into a ttx type without errors. (the text is typesets with the sourcecode-regular made with MFLUA and svg backend)

slide-19
SLIDE 19

ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8

19/25

MFLUA 0.8

For the BachoT EX meeting I have started to play with variable fonts. The ttx program can disassemble/assemble an OTF variable font, so I modifjed the ttx backend to make a CFF2

  • font. From the same METAFONT source of sourcecode-regular,

redefjning fill and unfill and applying a scaling transfor- mation to each curve the backend setup a single axes (wdth) to reduce a glyph (a condensed font). The font passes the ttx checker, and of course it was of fundamental importance that ConT EXt can load variable fonts.

slide-20
SLIDE 20

ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8

20/25

MFLUA 0.8

a b c d e f g h i j k l m n o p q r s t u v w x y z a b c d e f g h i j k l m n o p q r s t u v w x y z a b c d e f g h i j k l m n o p q r s t u v w x y z a b c d e f g h i j k l m n o p q r s t u v w x y z

black:condensed:75 black:condensed:80 black:condensed:90 red:condensed:100 (default) (yes, the ``i’’ and ``j’’ are wrong…)

slide-21
SLIDE 21

ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8

21/25

MFLUA 0.8

1 100%

  • 1

1

  • 1

1 75% wdth axes

normalized values scaled values "smaller than" "greater than" "master"

condensed regular

normalized values s

start coord.:-1 peak coord.:-1 end coord.: 0

user values

(in this case %)

  • ne

region?

}

slide-22
SLIDE 22

ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8

22/25

MFLUA 0.8

valid transformation

slide-23
SLIDE 23

ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8

23/25

MFLUA 0.8

what to do in this case?

slide-24
SLIDE 24

ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8

24/25

MFLUA 0.8

Piecewise transformations:

Alternative solution: perform glyph substitutions when a variation instance is selected in some range along one or more axes. (source: https://www.microsoft.com/typography/otspec/otvaroverview.htm)

slide-25
SLIDE 25

ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8 ConT EXt meeting 2017 — Maibach MFLua 0.8

25/25

That’s all ! Thank you Folks !