Open mcdurdin opened 7 months ago
@DavidLRowe @LornaSIL @srl295 your thoughts appreciated. I think that this would go a long way towards addressing remaining font sharing issues and allow us to eventually deprecate having fonts in the Keyman keyboards repository itself.
Obviously this could be applied to more than just fonts but would like to limit the conversation here to the font puzzle.
Proposal, in short: allow packages to reference files from GitHub repos, not just local files.
Yes, if that is possible it would be fine.
Or referencing LFF (that would mean we would need to include all the desired fonts on LFF).
What would we do about online help files needing fonts? Would we still need to add them to s.keyman.com
? Or could we again use the github repo or LFF for display of the help files? Or use the embed code from Noto.
There are fonts we don't really want in LFF (PUA encoded, hacked fonts, etc.) so the referencing the Keyman Github repo might be best.
What about referencing the Noto fonts online?
- Use the embed code:
We couldn't use the embed code as that is a HTML/CSS construct, as we need to be able to download a .ttf directly for embedding into the package. That may be possible also, but it needs to be a stable URL, so I would lean towards requiring a GitHub repo that we control, or that has good stability guarantees.
- What would we do about online help files needing fonts? Would we still need to add them to
s.keyman.com
? Or could we again use the github repo or LFF for display of the help files? Or use the embed code from Noto.
My thinking is we would automatically deploy all fonts found during the build to s.keyman.com. The primary problem would be if more than one package used the same font in different versions.
- Or referencing LFF (that would mean we would need to include all the desired fonts on LFF).
- There are fonts we don't really want in LFF (PUA encoded, hacked fonts, etc.) so the referencing the Keyman Github repo might be best.
We can certainly support more than one source, and it makes sense to make the mechanism generic for future extension, even if we limit the sources we will support in the keyboards repository. We can have LFF and other fonts in the keymanapp/keyboards repo or even in a separate keymanapp/keyboard-fonts repo to keep it clean.
This would slow down the build, as it would now need to source online content. It also introduces some fragility relating to network availability. Caching of fonts could mitigate both of those concerns, but caching also adds complexity.
Suggest we add a Source
element to kps Package.Files.File
. This would be:
local
(or not present): local filesystem, uses filename in <Name>
(back compat)flo:<id>
a font from https://fonts.languagetechnology.org, uses filename in <Name>
(path in <Name>
would be an errorgithub:<owner>/<repo>/raw/<hash>/<filepath/filename>
a direct link to a font on github.com, ignores <Name>
, uses filename from the URI, e.g. github:silnrsi/fonts/raw/b88c7af5d16681bd137156929ff8baec82526560/fonts/sil/alkalami/Alkalami-Regular.ttf
retrieves https://github.com/silnrsi/fonts/raw/b88c7af5d16681bd137156929ff8baec82526560/fonts/sil/alkalami/Alkalami-Regular.ttfnoto:
or similar for the futureQuestion on source of truth for filename of font. Preferable to use Source filename where possible I think. But then refs in OSKFont
and DisplayFont
elements are harder to determine (tooling makes this easier but raw edit of XML leads to inconsistency).
At the same time CopyLocation
, Description
, and FileType
elements should be deprecated and totally ignored by the compiler. They are busydata.
This would bump Package.System.FileVersion
to e.g. 18.0.
There would be no change to the corresponding .kmp file format.
Fonts are currently difficult to manage in Keyman Developer projects, particularly because we want to share fonts between keyboards. The developer must either clone the entire keyboards repository, or else jump through convoluted hoops in order to properly use shared fonts.
Proposal, in short: allow packages to reference files from GitHub repos, not just local files. Then the compiler will download (and maybe cache) files. The keyboard author could reference, e.g.
https://github.com/keymanapp/keyboards/blob/master/release/shared/fonts/aegyptus/Aegyptus.otf
. (Query, should we use sha instead of branch names?)Ideally, we can leverage an existing WSTech repository for this. Perhaps LFF. In theory, we could allow any URL in the .kps file. But we would probably want to have a whitelist for perf, stability, and security reasons for the keyboard repository.
This also resolves the single-keyboard-repo conundrum of how to share fonts.
It would be important to have a UI that helps keyboard devs to find the fonts as well.