A programming typeface generated by a program - Iosevka

Preview: http://be5invis.github.io/Iosevka/
Source: https://github.com/be5invis/Iosevka

First of all I would like to say that I'm very happy to have found this forum! I am a Node developer living in China and I am interested in font technologies. As I maintaining node-sfnt, a low-level library used to parse and generate TTFs in Node.JS, I decided to make a programming font using it. Iosevka is generated from a program written by me, as well as a set of parameters, pretty like Computer Modern, but in a more modern way. Because I and many of my friends live in China and Japan, I decided to make my font exactly half-width, to be compatible with Han Characters (exactly 1em wide). After a three-month development Iosevka become a typeface with over 2000 glyphs, covering most Latin, Greek and Cyrillic characters, as well as IPA symbols. However I am not a pro about typeface making, I would really like to hear your opinions about it.

Comments

  • attar
    attar Posts: 209
    The skeleton of the shapes is generally quite good but corrections of strokes are lackluster. Overshoots are highly inconsistent (e.g. why does o have overshoot but not a?), strokes tend to modulate a bit artificially e.g. bottom-right of t and stem relationships are wrong (why are horizontal segments as thick as vertical ones?) also in some letters – u being one of the most jarring – curvature lacks a smooth transition from the straight which makes the strokes turn too abruptly/suddenly.

    Also some letters like b, d, e are very strict about their DIN-like geometricness while others like a not so much, this creates some inconsistency imho. The same can be seen in the numerals.

    Why is top-left stroke of 4 so thick? 6 and 9 are too thick at stem joints (generally, characters should always thin out at least a little at stem joints to look the same thickness, as you did with bottom-right part of a). Numerals are hard. They need some more work here imho.
  • Belleve Invis
    Belleve Invis Posts: 269
    edited October 2015
    The skeleton of the shapes is generally quite good but corrections of strokes are lackluster. Overshoots are highly inconsistent (e.g. why does o have overshoot but not a?), strokes tend to modulate a bit artificially e.g. bottom-right of t and stem relationships are wrong (why are horizontal segments as thick as vertical ones?) also in some letters – u being one of the most jarring – curvature lacks a smooth transition from the straight which makes the strokes turn too abruptly/suddenly.

    Also some letters like b, d, e are very strict about their DIN-like geometricness while others like a not so much, this creates some inconsistency imho. The same can be seen in the numerals.

    Why is top-left stroke of 4 so thick? 6 and 9 are too thick at stem joints (generally, characters should always thin out at least a little at stem joints to look the same thickness, as you did with bottom-right part of a). Numerals are hard. They need some more work here imho.
    I actually added a procedure which reduces the width of horizontal stems by about 12%, but it is not enabled yet since it causes many compatibility issues.
    /a's overshoot lackage is a bug, and it is fixed in the recent commit.
    The numbers will be remade in the next commits.
  • @Adrien Tétar 
    I have an update with horizontal strokes thinner. The overshoot of /a is fixed either. Fixing or re-styling is pretty simple by changing the code.
  • Belleve Invis
    Belleve Invis Posts: 269
    edited October 2015
    More things are fixed in this build: stroke widths, consistency, etc.
    ps. Issues are welcome.
    • Stroke widths of curly tails are fixed
    • Fixed punctuation stroke width inconsistancy
  • The /four, /nine and /j are remade in this pre-release: https://github.com/be5invis/Iosevka/releases/tag/v0.1.16-p2


  • In http://typedrawers.com/discussion/comment/15616/#Comment_15616 you mentioned,
    • node-sfnt, a low-level font parsing and generation library
    You might like to replace node-sfnt with a python microservice that uses https://github.com/behdad/fonttools/ and https://github.com/jamesgk/ufo2ft (or port them to js) 
  • In http://typedrawers.com/discussion/comment/15616/#Comment_15616 you mentioned,
    • node-sfnt, a low-level font parsing and generation library
    You might like to replace node-sfnt with a python microservice that uses https://github.com/behdad/fonttools/ and https://github.com/jamesgk/ufo2ft (or port them to js) 
    Well node-sfnt is pretty "complete" now, porting a Python library may take more time than adding features to node-sfnt.
  • Hi Belleve, this is really impressive.

    Is this the only method for designing an entire font's set of glyphs using spiro curves? Or do you know of others? How likely is the PatEL syntax to change; it's a recent project of yours so it would be reasonable to not expect it to be stable? Is there documentation anywhere(beyond the `README.md` file)? Have you seen any other implementations of spiro curve specification?  I'm interested in doing the opposite of what Dave suggested and figuring out a way to work directly with multi-glyph files like your `.patel`s rather than the `.plate`s available for Levein's Inconsolata in Python. When I search for spiro in fonttools, nothing comes up, and when I search google, all that comes up are fontforge's C based tools. 

    To be honest, I think julia might be even more appropriate than python since it can represent dual numbers (and therefore gets derivatives for free for abstract functions, making the integration step much easier)…but I don't know julia and I do know Python. I'm pretty sure there are many more efficient scientific/numeric computing libraries in Python than in js.

    I'm looking forward to seeing more of your work. This is a cool set of tools you've developed. The typeface is nice too, but a bit narrow for my tastes (which really isn't avoidable since you went with half-width characters, which is totally reasonable given your orthographic considerations).
  • Hi Belleve, this is really impressive.

    Is this the only method for designing an entire font's set of glyphs using spiro curves? Or do you know of others? How likely is the PatEL syntax to change; it's a recent project of yours so it would be reasonable to not expect it to be stable? Is there documentation anywhere(beyond the `README.md` file)? Have you seen any other implementations of spiro curve specification?  I'm interested in doing the opposite of what Dave suggested and figuring out a way to work directly with multi-glyph files like your `.patel`s rather than the `.plate`s available for Levein's Inconsolata in Python. When I search for spiro in fonttools, nothing comes up, and when I search google, all that comes up are fontforge's C based tools. 

    To be honest, I think julia might be even more appropriate than python since it can represent dual numbers (and therefore gets derivatives for free for abstract functions, making the integration step much easier)…but I don't know julia and I do know Python. I'm pretty sure there are many more efficient scientific/numeric computing libraries in Python than in js.

    I'm looking forward to seeing more of your work. This is a cool set of tools you've developed. The typeface is nice too, but a bit narrow for my tastes (which really isn't avoidable since you went with half-width characters, which is totally reasonable given your orthographic considerations).
    Well, creating a font actually needs a domain-specific language, like Knuth's METAFONT language. With PatEL's macro system I can easily turn PatEL into a DSL while remaining its full ability of programming. The PatEL is in another repository I created, though not documented yet. It's syntax is basically a Lisp with improvements reducing brackets (by using colons and indents), and suppporting infix operators.

    The `spiro` is actually Raph's `libspiro`, though I augmented it with the "af" mechanism: this mechanism makes me able to generate the BOTH side of a stroke within one `spiro` call.
  • In the recent days I've made a lot of refactors, including rewritten of some glyphs. It's 1.0-beta6 now.

    New homepage: http://be5invis.github.io/Iosevka/
    Online specimen: http://be5invis.github.io/Iosevka/specimen.html