Coder Social home page Coder Social logo

Comments (5)

mooman219 avatar mooman219 commented on June 6, 2024 1

I fixed it, I'll push the change eventually

from fontdue.

mooman219 avatar mooman219 commented on June 6, 2024

tl;dr fontdue accepts out of spec fonts, but your font is more out of spec than the usual out of spec font.

Most font rasterizers, like Fontdue, raster a glyph in scanline order. It knows when it enters or leaves a contour by the direction of the line it encounters. Specifically, this is the winding order. TTF fonts use the glyf table while OTF fonts generally use the CFF/CFF2 tables. The glyf table specifies that contours are defined clockwise, while CFF/CFF2 is counter-clockwise.

TTF glypf table example:
image

Fontdue accept malformed fonts to some degree. It will re-compute glyph metrics and winding order per glyph (that commit cb2e9b2), which fixes a number of issues with some moderately wrong fonts. If a font has a clockwise winding order for some glyphs, but a counter clockwise order for other, Fontdue will render them all correct.

The issue here is that this spec is not enforced, and fonts that don't follow the spec produce undefined behavior. Your font, https://nickmass.com/files/evesansneue-regular.otf, is out of spec. It's a malformed font. Your 'i' and 'j' use two different winding orders for each of its contours. I colored the subtractive and additive sections of the glyph in red and green.

image


I'm open to fixing this, I'd love to support more out of spec fonts, but this issue is definitely on the font.

from fontdue.

nickmass avatar nickmass commented on June 6, 2024

Thank you for the detailed response, I was able to open the font in an editor and quickly fix the directions of those contours and now fontdue renders everything perfectly.

from fontdue.

mooman219 avatar mooman219 commented on June 6, 2024

No worries, I'll work on thinking of a way to handle this new edge case automatically so you won't need to hand fix the font in the future.

from fontdue.

mooman219 avatar mooman219 commented on June 6, 2024

Fixed here: 6f0cea6#diff-7c2ff0572abc69580f0e70fc67a1cbe0d6d5e94bdb96a787ed350e108ef7f3b0

from fontdue.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.