arrowtype / recursive

Recursive Mono & Sans is a variable font family for code & UI
https://recursive.design
SIL Open Font License 1.1
3.29k stars 53 forks source link

Add Cyrillic support, including localization for Serbian, Bulgarian, etc #430

Open jozsefk9 opened 3 years ago

jozsefk9 commented 3 years ago

This font is amazing to me! Thank you so much for making it available.

Would be nice to have Serbian cyrillic characters one day :) Thank you for consideration!

arrowtype commented 3 years ago

Hey @jozsefk9, thanks for the kind words, and thanks for reaching out!

I'm lucky I had support from Google Fonts to fund the labor of finishing and releasing Recursive as an open source font. I would love to add support for additional scripts in the future, but it would be a pretty sizable project.

For a fuller explanation of why it's time-consuming to add additional styles/characters to Recursive, here's an earlier explanation of what it takes:

https://github.com/arrowtype/recursive/issues/218#issuecomment-551195560

I'll leave this issue open, though. If enough people want this and add reactions to the top comment, maybe someone like Google Fonts would be willing to fund it in the future!

jozsefk9 commented 3 years ago

Thank you for reply and explanation. And that detailed information about what it takes to add another set of characters. It's really a huge amount of work, I see. Regarding Serbian cyrillic, I am not sure there would be enough reactions but it's good to have it open. I guess, there would be far more reactions for Russian cyrillic and that's still something. It's almost the same thing though, except few characters, like for example, italic "t"... Anyway, it's far too early to talk about that yet. Let's see how it goes. Happy New Year! :)

arrowtype commented 3 years ago

Definitely – if I were to add Cyrillic, I would be sure to do so in a way that converted the widest reasonable range of Cyrillic languages! So, I would probably start with the Google Fonts Cyrillic Plus or Pro character sets, from here:

https://github.com/googlefonts/gftools/blob/master/Lib/gftools/encodings/GF%20Glyph%20Sets/README.md

jozsefk9 commented 3 years ago

We will see how it goes when time comes. I am yet to see a font on Google which got a proper italic "t" in cyrillic for Serbian language. Only if the italic version is a bit slanted normal type. Then it's OK, but if it is a cursive or something like that, then it's always Russian "t", not Serbian.

arrowtype commented 3 years ago

Hmm, interesting! Would you potentially be willing to say more about the differences? Or potentially, would you be able to draw or show examples of what you see that is correct and incorrect?

jozsefk9 commented 3 years ago

Here you can see what happens with certain fonts with cyrillic characters. Red is wrong if we are talking about Serbian, cyrillic, italic, lowercase "t". Green is more acceptable than red :) Black is totally correct. Screenshot_20210105_214525 What would it take to draw it?

arrowtype commented 3 years ago

Wow, that is a surprising Italic shape! Thank you for pointing this out to me; I will keep that in mind as something to look out for when I collaborate with someone on Cyrillic at some point in the future.

What would it take to draw it?

Honestly ... many, many weeks of work, probably from a couple of people. The Latin script has taken a lot of work to make, and I’m still not 100% done closing all the technical issues that arose from fitting so many styles into a variable font.

Potentially, the project could be forked, and Cyrillic could be added for "core" styles, rather than everything.

That is, if the whole typeface is extended, that requires working on 24 total sources (so, each glyph has to be drawn 24 times, and all of these 24 drawings have to be compatible for interpolation). But, if for example the job was to just make Cyrillic for Monospace styles, Weights 300–800, Uprights–Italics, it would require working on just 4 sources. If it the Casual axis were added in, it would be 8 sources. Still a lot, but more reasonable.

But still, that would be a pretty large project. To be honest, it would probably take either a really passionate person to take it on as a fully-forked project, or a company (like Google Fonts) to sponsor the work as a more ”official“ extension.

jozsefk9 commented 3 years ago

I see. It sounds like the fixes you have for issues you got with Latin script could be applied to Cyrillic scripts one day. I might be wrong though, but it sounds logical :) Anyway, I believe it makes sense to wait for the Latin script to be done completely, before doing anything else. And regarding core styles or every style, that depends how it will be done and by whom, or how passionate will be the person, as you say :) To me, it makes sense to do every style. But after reading your comments, here and on the other topic last time, it's a serious task and not small at all. If Google Fonts already supports the work on other Recursive styles, why wound't they support adding Cyrillic scripts to it?

Recursive looks so great to me that I replaced every single font in the OS with it :)

Recursive font everywhere5

arrowtype commented 3 years ago

Daaang, that looks super cool! Is that Kubuntu Linux? (I’m just guessing after googling Linux OS logos...)

If Google Fonts already supports the work on other Recursive styles, why wound't they support adding Cyrillic scripts to it?

It’s possible! It would definitely be cooler to add Cyrillic across the whole system, rather than forking it. But, it would just be a significant investment, and I can’t speak for or guess at the business priorities of Google Fonts. It might slightly help to file an issue like "Add Cyrillic to Recursive" at https://github.com/google/fonts/issues, just to get it on their radar and to give other folks a place to upvote the idea if they would like it, as well.

arrowtype commented 3 years ago

A useful article about localization for Cyrillic: https://www.fontsmith.com/blog/2016/10/12/cyrillic-script-variations-and-the-importance-of-localisation

habamax commented 3 years ago

Would really love to see some Cyrillic(Russian) too. Your font is beautiful!

jozsefk9 commented 1 year ago

Two and a half years later 😊 but still nothing it seems.

arrowtype commented 1 year ago

If you would like to sponsor it or know of someone to sponsor development of Cyrillic, I'm open to inquiries! Without sponsorship, this sadly isn't likely to happen. It would be a pretty large scope of work, and I have to eat, pay rent, etc.

arrowtype commented 1 year ago

PS, as a more immediately helpful and fuller answer...

If there is anyone who wants to use Recursive for punctuation and Latin-script text, but also needs Cyrillic support that looks good and works well, I recommend IBM Plex Mono as a fallback font. This is barring the issue mentioned above for Serbian, which may or may not still be an issue in Plex, and may or may not apply to your given usecase.

Recursive uses a pretty standard monospace font spacing, which is the same as Courier, IBM Plex Mono, and quite a few others. This means that it is easy to have a good-looking fallback, which will work basically seamlessly, covering the characters that Recursive doesn’t currently include, such as Cyrillic. Additionally, Plex has a Cyrillic which is somewhat different but quite harmonious with Recursive’s design. In fact, Recursive’s design was in part inspired by Plex (amongst other things), as Plex is a brilliant font family!

The spacing matches pretty much exactly:

image

The metrics like x-height don’t line up exactly, but they are very close, and maybe indistinguishable at text sizes:

image

To specify how I do this personally... in VS Code, my Font Family preference looks like this:

Rec Mono Duotone, IBM Plex Mono Text, monospace

image

I’m using Rec Mono Duotone from the Recursive Code Config project. These fonts include code ligatures in a way that is easy to use in code editors. They are also available in the releases of this repo, within the "Code" folder.

The normal "Regular" style of Plex Mono is somewhat lighter than Recursive, so note that my font preference specifically uses the "Text" style of Plex.

You could do something similar on the web with CSS, in Sublime Text, etc.

Several other monospace fonts will work, but few would be as close a match as Plex.

Or, of course, if your design / code primarily uses Cyrillic text, it may make more sense to just use Plex or another font with Cyrillic support.

And, if any companies come along that really want to use Recursive – but need it to support Cyrillic – I am here and happy to make those updates, but it will be a project that takes multiple months, at least... so I can’t just add it without significant financial support. I discussed this in more detail above, though.

Hope this helps someone!

jozsefk9 commented 1 year ago

Thank you. I will do that in the mean time. Good idea and suggestion.

jozsefk9 commented 1 year ago

I found few other fonts installed on my system which are the same width as Recursive Mono:

arrowtype commented 1 year ago

Nice! Yeah, any of those might make a good pairing, as well.