Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New toolset #40

Closed
C1710 opened this issue Jun 13, 2019 · 4 comments
Closed

New toolset #40

C1710 opened this issue Jun 13, 2019 · 4 comments
Labels
opinions wanted Something maybe worth discussing

Comments

@C1710
Copy link
Owner

C1710 commented Jun 13, 2019

Building this font is currently rather hard. Especially if you are working with different emoji sets, maybe even with different formats.

In one issue I also stated that my long time-goal is to have a software (with a GUI) that allows everyone to build their own emoji set, e.g. Blobmoji but with the water pistol as the default pistol emoji.

I'm currently making the first step towards this goal by writing a new software that is intended to replace the Makefile by a more platform-independent, reliable Rust-based software that is supposed to work mostly out of the box with as little external dependencies as possible.
Right now I'm preparing the necessary data structures and creating the SVG rendering pipeline which will directly include optimizations without any intermediate files.

It would be nice to see some ideas I might incorporate in that software 😊

(The repository isn't public yet, because I still need to check all the licensing stuff for the Crates I use, but I'll soon publish it at https://github.com/c1710/emoji_builder)

@C1710 C1710 added the opinions wanted Something maybe worth discussing label Jun 13, 2019
@C1710 C1710 pinned this issue Jun 13, 2019
@C1710
Copy link
Owner Author

C1710 commented Jul 16, 2020

Update on the progress: The font can be built with it, however there are two problems (or rather differences to the current resulting font):

  • In order to get rid of Cairo as a dependency (and because I'm still struggling with all that FFI stuff), I implemented a custom waveflag algorithm (i.e. that thing that gives the flag emojis a curved shape).
    The shape is similar to the current one but uses a sinus function (cf. Add a waveflag function emoji_builder#2), but it doesn't add a border or the shiny finish (the flags remain a flat look) and its quality is far from perfect.

  • The current toolset uses pngquant for image compression, which at that point was written in C.
    The underlying library is currently developed in Rust, which would make it very easy to implement it.
    However it's only available under the terms of the GNU GPL v3, which cannot be used in projects using the Apache license 2.0, i.e. there are three options here:

    1. Use the GNU GPL v3 for emoji_builder
    2. Don't use libimagequant
    3. Create a GPL-licensed fork

    As I don't want to restrict other developers who might fork this software to one specific license, option 1 is no option.
    Option 2 is what I'm currently doing, however this makes the resulting font about 5MiB larger, which is not great.
    Option 3 would add additional work. However, if it's needed, I might do that.
    Using an old version of the library is no option either, as it's very complicated and requires Make which I want to get rid of here.

Current advantages:

  • It's faster (I think), especially with rendering the SVGs.
  • It accepts several different naming schemes, which makes it easier e.g. to build Twemoji-based fonts.
  • It actually tracks the rendering of the SVGs, so it always uses the latest image data (looking at you, radio button)

Coming soon:
A better version of the skin tone generator will be added and (actually before that) it will be possible to reduce the emojis to a predefined color palette, giving them a much more consistent look

@igalic
Copy link

igalic commented Jul 16, 2020

Use the GNU GPL v3 for emoji_builder

despite my Apache Software Foundation hat, i'd say go with this option, it's the easiest.

@C1710
Copy link
Owner Author

C1710 commented Jul 17, 2020

A version built with the new tool can now be found at https://github.com/C1710/blobmoji/blob/emoji_builder/fonts/Blobmoji.ttf
It's about 12MiB large and it includes a simpliied color palette, which is even applied to flags.

@C1710
Copy link
Owner Author

C1710 commented Jun 21, 2021

Update: The new toolset is used for Emoji 13 and 13.1, including (for the first time 😬) automatic validation of the font (i.e. whether there are any emojis missing).

However, skin tones and the EmojiCompat variant are still generated using the existing scripts as I still have trouble to properly integrate skin tone generation (the code for the skin tone generation itself is already done, but integrating it in the pipeline in an extensible way is difficult) and I haven't started working on EmojiCompat as I would need to integrate the EmojiTables properly.

@C1710 C1710 closed this as completed Jun 21, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
opinions wanted Something maybe worth discussing
Projects
None yet
Development

No branches or pull requests

2 participants