Pomax / lib-font

This library adds a new Font() object to the JavaScript toolbox, similar to new Image() for images
MIT License
734 stars 72 forks source link

Get named instances from fvar? #53

Closed RoelN closed 4 years ago

RoelN commented 4 years ago

A list with name ID and axes values would be useful!

Pomax commented 4 years ago

you mean like getSupportedAxes() and getAxis(name), or something else?

RoelN commented 4 years ago

That'd get me the axes, but I mean named instances that point to predefined axes settings.

Like the dropdown here:

image
twardoch commented 4 years ago

You have the instances in fvar, they point to name IDs which are in the name table.

On Tue, 26 Nov 2019 at 08:56, Roel Nieskens notifications@github.com wrote:

That'd get me the axes, but I mean named instances that point to predefined axes settings.

Like the dropdown here:

[image: image] https://user-images.githubusercontent.com/4570664/69609798-a91ad400-102a-11ea-91ed-f2a21db2f390.png

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/Pomax/Font.js/issues/53?email_source=notifications&email_token=AAD6XRG5ORWF227VLQ4YINDQVTJEFA5CNFSM4JRG5MZKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEFFCK2Y#issuecomment-558507371, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAD6XRGDOUTULCO6Q36ZLSDQVTJEFANCNFSM4JRG5MZA .

Pomax commented 4 years ago

As Adam mentions, the axis record has an ID into the name table that should let you look it up pretty easily:

const tables = myFont.opentype.tables;
const axis = tables.fvar.getAxis(`wdth`);
const fullName = tables.name.get(axis.axisNameID)

If it would drastically simplify your work, I could add a function to fvar, or to variation axis records, that fetches that full name automatically, but I'm not sure it's complex enough to warrant a dedicated function (that said, this probably falls in the discussion around how much "convenience" to offer on top of the straight up parsed data)

RoelN commented 4 years ago

But that gives me axis names, that's a problem indeed solved. I'm looking for named instances, the predefined styles that set axes to specific values. I'm not seeing that in the current fvar object, or am I missing something obvious?

twardoch commented 4 years ago

Pomax's "fvar" starts with "import lazy". Which, I take it, imports from his soul ;)

Fella only implemented half the table :D

On Tue, 26 Nov 2019 at 23:31, Roel Nieskens notifications@github.com wrote:

But that gives me axis names, that's a problem indeed solved. I'm looking for named instances, the predefined styles that set axes to specific values. I'm not seeing that in the current fvar object, or am I missing something obvious?

— You are receiving this because you commented.

Reply to this email directly, view it on GitHub https://github.com/Pomax/Font.js/issues/53?email_source=notifications&email_token=AAD6XRGWHZS5WVWNZ2ZEPRTQVWPTFA5CNFSM4JRG5MZKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEFHU7SI#issuecomment-558845897, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAD6XRHNZATSNXRCG35NKATQVWPTFANCNFSM4JRG5MZA .

Pomax commented 4 years ago

haha, yeah I think I stopped when it turned into "check flags to figure out how to parse the rest" and moved on to more fun stuff. I've unchecked fvar in https://github.com/Pomax/Font.js/issues/45

Pomax commented 4 years ago

alright, instance records added. No convenience functions, but then it doesn't really need it, just tap into myfont.opentype.tables.fvar.instances, e.g. to get the names, map the subfamilyNameID into the name table:

const { fvar, name } = myFont.opentype.tables;
const instanceNames = fvar.instances.map(instance =>
    name.get(instance.subfamilyNameID)
);
RoelN commented 4 years ago

🙏 Supermegathanks!! 💖

twardoch commented 4 years ago

Maybe Pomax defines "lazy" differently: I'll be adding code when people ask for it, but not before :) That's the good kind of lazy, I'd say ;)

Pomax commented 4 years ago

it's the "doing the actual programming" version of lazy loading =D

But on a less joking note, that's kind of true: I started the rewrite for some folks who needed a simple opentype lib, and while adding tables has turned out to be easier than expected, stuff that people actually needed still got done first, with everything that has no one actually asking for it getting done "whenever I feel like it".

The rewrite's still young, so for now that's still "when I have some dead moments during the day" =)