~protesilaos/iosevka-comfy

Update to Iosevka Comfy version 1.4.0

- All fonts are now available in two more weights: medium and
  semibold.  Use them to refine your interfaces.  This is in response to
  the request for a medium weight made by madjxatw in issue 8 on the
  GitHub mirror: <https://github.com/protesilaos/iosevka-comfy/issues/8>.

- Large portions of the build instructions have been rewritten to (i)
  track the numerous and non-trivial breaking changes made by upstream
  Iosevka and (ii) preserve the style of Iosevka Comfy.

- The latin long S (ſ) and the Latin sharp S, else Eszett (ß), are now
  supported by Iosevka Comfy.  Details of shape have been considered,
  such that the reader does not conflate those characters with similar
  ones (e.g. the sharp S with a Greek beta, an ampersand, or an 8).

- The slanted version of the ampersand looks the same as its upright
  counterpart.  This is a deviation from the previous version, where
  this character looked like a flipped 3 with a flat top: I had
  introduced that style by mistake and did not want to rebuild
  everything just for it (rebuilding fonts is an expensive
  operation---I spent 8 hours this time).

- Thanks to Raymond Ko for sending a patch to make Iosevka Comfy build
  on top of Iosevka version 26.3.1.  I installed it to register the
  contribution in Git, though I eventually wrote the aforementioned
  changes from scratch as the current development of Iosevka has more
  breaking changes (the version was updated to 27.1.0 and more changes
  were made on top).  It was easier to review all code points, than to
  assume some as fixed.  Raymond send the patch on the mailing list:
  <https://lists.sr.ht/~protesilaos/general-issues/patches/44816>.

As a note for future users, I am always keeping track of upstream
Iosevka, though I do not want to rebuild Iosevka Comfy too frequently.
Upstream has a policy of changing the code points practically every
few weeks, which then requires hours or days of testing on my end just
to keep Iosevka Comfy the same.  If you try to build Iosevka Comfy
from source, make sure to use the commit in iosevka.git specified in
my project's README.md, as of this writing: this is the current
working version for me.  Future versions of iosevka.git will probably
contain breaking changes.  I will eventually adapt to them.
146bbb2f — Raymond Ko 10 months ago
fix iosevka-comfy for version 26.3.1 of Iosevka

Hi prot,

I love your font patch, especially the wide variant. However, Iosevka,
the base project, has made many breaking changes since the version
used with your private build plan file so it no longer compiles.

This patch makes the necessary changes so that it builds again and can
be used as a starting point to keep the project up to date.

I tried my best reading the comments and choosing the right glyphs
intended, but getting it 100% right is very difficult without spending
many hours since I am not the original creator. One would need to wait
for builds and reverse engineer from the screenshots.

>From 2d32840c2227b4b8404d69a71200983d246b1a0f Mon Sep 17 00:00:00 2001
From: "Raymond W. Ko" <raymond.w.ko@gmail.com>
Date: Sun, 17 Sep 2023 17:09:25 -0400
Subject: [PATCH] fix build plan for Iosevka v26.3.1
Update to Iosevka Comfy version 1.3.0

* Include table in the 'README.md' file that succinctly describes the
  Iosevka Comfy variants.  This is it:

  | Family                          | Shapes | Spacing | Style      | Ligatures |
  |---------------------------------+--------+---------+------------+-----------|
  | Iosevka Comfy                   | Sans   | Compact | Monospaced | Yes       |
  | Iosevka Comfy Fixed             | Sans   | Compact | Monospaced | No        |
  | Iosevka Comfy Duo               | Sans   | Compact | Duospaced  | Yes       |
  |---------------------------------+--------+---------+------------+-----------|
  | Iosevka Comfy Motion            | Slab   | Compact | Monospaced | Yes       |
  | Iosevka Comfy Motion Fixed      | Slab   | Compact | Monospaced | No        |
  | Iosevka Comfy Motion Duo        | Slab   | Compact | Duospaced  | Yes       |
  |---------------------------------+--------+---------+------------+-----------|
  | Iosevka Comfy Wide              | Sans   | Wide    | Monospaced | Yes       |
  | Iosevka Comfy Wide Fixed        | Sans   | Wide    | Monospaced | No        |
  | Iosevka Comfy Wide Duo          | Sans   | Wide    | Duospaced  | Yes       |
  |---------------------------------+--------+---------+------------+-----------|
  | Iosevka Comfy Wide Motion       | Slab   | Wide    | Monospaced | Yes       |
  | Iosevka Comfy Wide Motion Fixed | Slab   | Wide    | Monospaced | No        |
  | Iosevka Comfy Wide Motion Duo   | Slab   | Wide    | Duospaced  | Yes       |

* Review all glyph codes to preserve the font's style in light of the
  numerous breaking stages in the main Iosevka repository.  An example
  of such a change is when 'cv20 = 2' has a different style than what
  it used to or when the 'cvXX' refers to another character than what
  it once did.

* Ensure the lower case italic form of 'f' has a crossbar at the
  x-height. This is how its roman counterpart is: it aligns with 'i'
  and 't'.

* Make the capital 'B' in all the "motion" variants (slab serif families)
  consist of two symmetric chambers.  This is consistent with the sans
  serif variants of Iosevka Comfy.

* Revise the 'f' in the "motion" variants to be the same as their sans
  serif counterparts.  The reason is that the previous glyph was
  closed at the top and was thus harder to read at small point sizes.

* Change the italic forms of lower case 'v', 'w', 'x', and 'z' from
  curly to straight across all the variants.  This is to ensure a
  consistent rhythm in all contexts between upper and lower case
  characters as well as upright and slanted forms.

* Let capital 'W' have a middle joint below the height of its two
  sides in order to be consistent with capital 'M' and the lower case
  'w'.

* Adjust the bar character '|' (also known as "pipe") to have no slope
  in italic forms.  The intent is to disambiguate it from the forward
  slash.  Also, the pipe can now be used in plain text tables even if
  those are italicised (e.g. a comment in programming code).

* Declare the Iosevka Comfy Wide Motion Duo as a slab serif font.
  This affects characters that are not explicitly defined in our list
  of overrides.

* Clarify some comments in the build plan of Iosevka Comfy to better
  describe the intended looks of the referenced characters.
Make table monospaced to render on GitHub
Add table with Iosevka Comfy variants
Update to Iosevka Comfy version 1.2.0

* Make necessary adjustments to handle backward-incompatible changes
  in upstream Iosevka.  The intent is to preserve the aesthetic of
  Iosevka Comfy.

* Introduce the "wide motion" superset of font families.  This is
  another triplet that consists of (i) a regular monospaced style with
  support for ligatures and some wide glyphs like arrows, (ii) a fixed
  spaced monospaced variant that does not support ligatures or any
  wide glyphs, and (ii) a quasi-proportional ("duospaced") variant
  that preserves some of the rigidity of its monospaced counterparts
  but allows certain glyphs to occupy their natural width.  The
  project's README describes all the variants on offer.
Update to latest Iosevka version

There are no user-facing changes in this release.  Though I had to
test everything again and make sure to adapt to upstream's breaking
changes.

Given this update, I am removing some files that had stayed behind
from a previous release.
Make backronym easier to read
Clarify wording of "build information"

The language was confusing, as demonstrated by Dave Abrahams in issue
3 on the GitHub mirror: <https://github.com/protesilaos/iosevka-comfy/issues/3>.
Update to Iosevka Comfy version 1.1.0

* Made the '@' and '%' characters wider in the font families
  'iosevka-comfy-duo', 'iosevka-comfy-motion-duo', 'iosevka-comfy-wide',
  'iosevka-comfy-wide-fixed', 'iosevka-comfy-wide-duo'.  This is
  consistent with their design, which has wider glyphs and/or more
  generous spacing.

* Built using upstream Iosevka 'v16.3.4', commit 'ad1e247a'.

The rest of the design remains the same as before.  Read the detailed
release notes for version 1.0.0:
<https://protesilaos.com/codelog/2022-09-14-iosevka-comfy-1-0-0/>.
Update to Iosevka Comfy version 1.0.0

Breaking change about vertical spacing
--------------------------------------

I no longer override the line height established by upstream Iosevka.
This means that all the font families provided by the Iosevka Comfy
project are the same as Iosevka in terms of vertical spacing.

This change is necessary to conform with recent developments upstream.
Those affected Iosevka Comfy in two ways:

1. Capital letters with accents would no longer be rendered in full.
   The accent would be cropped.  I tried some modest adjustments to the
   relevant variable, but the problem would still occur at certain point
   sizes.

2. The "wide" families no longer had the same vertical spacing as the
   others.  This is a regression from what we used to have.  I do not
   want the various families of this project to be radically different,
   so such a deviation is unacceptable.

New families and reorganisation into triplets
---------------------------------------------

I added two new families: 'iosevka-comfy-motion-fixed' and
'iosevka-comfy-wide-duo'.  These complete the set of the three stylistic
variants provided by this project.

These triplets follow the naming scheme 'NAME{,-fixed,-duo}'.  The base
name is monospaced and supports ligatures.  The "fixed" one is strictly
monospaced so as to work with all terminal emulators: it does not
support ligatures.  And the "duo" is quasi-proportionately spaced, while
supporting ligatures.

1. The **compact, sans-serif** set:

   - 'iosevka-comfy' is monospaced and supports ligatures.  Apart from
     ligatures, it allows certain special glyphs, such as arrows, to
     occupy more than one block.

   - 'iosevka-comfy-fixed' is like 'iosevka-comfy' albeit strictly
     monospaced and thus does not support ligatures.  All glyphs are
     exactly the same width.  Use this if you prefer it or if your
     application (e.g. terminal emulator) does not recognise
     'iosevka-comfy' as a monospaced font.

   - 'iosevka-comfy-duo' is quasi-proportional and supports ligatures.  The
     naturally narrow glyphs, such as 'i', are allowed to occupy their
     natural width instead of one space.

2. The **compact, serif** set:

   - 'iosevka-comfy-motion' is monospaced and supports ligatures.  It is
     like 'iosevka-comfy' but with lots of small tweaks that add serifs
     and tailed ends to relevant glyphs.  Put simply, it is the serified
     counterpart of 'iosevka-comfy'.

   - 'iosevka-comfy-motion-fixed' is the serif equivalent of the
     aforementioned 'iosevka-comfy-fixed'.

   - 'iosevka-comfy-motion-duo' is the serif equivalent of
     'iosevka-comfy-duo'.

3. The **wide, sans-serif** set:

   - 'iosevka-comfy-wide' is the same as 'iosevka-comfy' except it is
     noticeably wider.  It also looks taller than 'iosevka-comfy' even
     though both variants fit the same number of lines on a screen.

   - 'iosevka-comfy-wide-fixed' is the "wide" counterpart of the
     'iosevka-comfy-fixed' family.

   - 'iosevka-comfy-wide-duo' is the "wide" counterpart of the
     'iosevka-comfy-duo' family.

Inter-font consistency
----------------------

I ensured that all fonts feel part of the same project.  The stylistic
differences between them are subtle and, generally, only go in one
direction (e.g. the "motion" triplet just adds some serifs while
retaining the main skeleton).

Simplification of the README and update to the demo pictures
------------------------------------------------------------

I rewrote the README to omit some of its more technical sections.  It
now is simpler as it focuses on describing what this project offers.

The README also includes links to all official sources of the project.

Furthermore, I updated the sample screen shots to better showcase the
three variants mentioned above:
<https://protesilaos.com/emacs/iosevka-comfy-pictures>.

Miscellaneous
-------------

The README now suggests a shallow clone of the git repo.  Keeping a
version history of lots of .ttf files is not ideal.

Advanced users who plan to tweak the 'private-build-plans.toml' and then
build their own fonts, may be interested in the shell one-liner I use to
build the font files:

    for i in iosevka-comfy{,-motion,-wide}{,-fixed,-duo} ; do npm run build -- ttf::$i ; done

This is invoked from the root of the iosevka.git repo and works with my
'private-build-plans.toml'.

The backronym of Iosevka COMFY is: Iosevka (Could Only Modify a Font, Yes)
Rebuild "motion" fonts per 71a6883, 94b6450, 7280e5d

As with commits d0f38b6, 7f80ee6, this does not yet form part of a
release.  I am testing all the fonts to ensure everything works as
intended.  I will prepare a release when the time is right.

For the underlying reason, refer to the commit message of 7f80ee6.
Make 'm' in iosevka-comfy-motion-duo long-middle-legged

This makes iosevka-comfy-motion-duo stylistically consistent with its
iosekva-comfy-duo counterpart.  We want the different between the two to
be small: basically, a few added serifs.
Make 'D' in "motion" variants same as our default

This is a purposeful break of rhythm to ensure that TODO does not look
like TOOO at small point sizes.  All other variants do this, so we want
iosevka-comfy-motion and iosevka-comfy-motion-duo to be the same.
Make the "motion" 'f' similar to our default

This makes it look closer in spirit to the standard iosevka-comfy
variant.  The intent is to make iosevka-comfy-motion feel close to
iosevka-comfy with the addition of carefully selected serifs.
Revise the "motion" variants

Removes some of the curly or odd characters.  I think this fixes the
style for good.  It makes the "motion" variants look closer to the
standard iosevka-comfy style.

As with commit 7f80ee6, this is not yet part of a new release.  I might
still make further changes.  I think the 'f' may need to be changed in
these "motion" variants.  It feels too fancy right now, but I am not
sure yet.
BREAKING: Rebuild files without change to line height

Changes upstream affected our override of the 'leading' variable to the
effect that some point sizes would crop accents over capital letters.

Also, the "wide" variants no longer occupied the same lines as the
others, which is a regression based on what we had before.  I do not
want the "wide" ones to be a different font.

This is not yet part of a release.  I might make further changes.
Update to Iosevka Comfy 0.5.0

* Created a dedicated page for sample pictures of the fonts:
  <https://protesilaos.com/emacs/iosevka-comfy-pictures>.

* Revised the proportions of the fonts to have a marginally less compact
  vertical spacing.  The intent is to fix the display of accents over
  capital letters, such as ÀÄÃÁÖÕ.  This issue was discussed on the
  mailing list.  Thanks to inwit for bringing the matter to my
  attention:
  <https://lists.sr.ht/~protesilaos/general-issues/%3CCMG66XYLH7MO.2T0058JIS1343%40bisio%3E>.

* Made sweeping changes to Iosevka Comfy Motion and Iosevka Comfy Motion
  Duo to address their [subtle] inconsistencies and enforce a uniform
  style throughout their glyphs.  Put simply, the "motion" variants are
  the pseudo-serif counterparts of base Iosevka Comfy and Iosevka Comfy
  Duo, respectively.

* Rebuilt all font files based on Iosevka 'v16.2.0', commit 'b7a59ee4'
  on 2022-09-10.

* Updated the README to reflect the aforementioned.

* * *

Reminder of the font families on offer:

* 'iosevka-comfy' is monospaced and supports ligatures.  Apart from
  ligatures, it allows certain glyphs, such as arrows, to occupy more
  than one block.

* 'iosevka-comfy-motion' is like 'iosevka-comfy' but with lots of small
  tweaks that add serifs and tailed ends to relevant glyphs.  Put sipmly
  this is the pseudo-serif version of the otherwise sans-serif base
  style.

* 'iosevka-comfy-duo' is quasi-proportional and supports ligatures.  The
  naturally wide glyphs, such as 'i', are allowed to occupy their
  natural width instead of one space.

* 'iosevka-comfy-motion-duo' is like 'iosevka-comfy-duo' but with the
  serified style of 'iosevka-comfy-motion'.

* 'iosevka-comfy-fixed' is like 'iosevka-comfy' albeit strictly
  monospaced and thus does not support ligatures.  All glyphs are
  exactly the same width.  Use this if you prefer it or if your
  application (e.g. terminal emulator) does not recognise
  'iosevka-comfy' as a monospaced font.

* 'iosevka-comfy-wide' is the same as 'iosevka-comfy' except it is
  noticeably wider.  It also looks taller than 'iosevka-comfy' even
  though both variants fit the same number of lines on a screen.

* 'iosevka-comfy-wide-fixed' same as 'iosevka-comfy-wide' though it is
  strictly monospaced and does not support ligatures.
Update to Iosevka Comfy 0.4.0

- Rebuilt all files using upstream Iosevka version 'v16.0.2', commit
  '2f48331f'.  This is done to incorporate the latest changes (although
  they do not affect Iosevka Comfy).

- Designed a new stylistic "motion" variant.  Select glyphs are curlier
  and/or have tailed ends and serifs, giving a more playful and fluid
  impression.  By comparison, standard Iosevka Comfy is austere.

  The new variants are (i) 'iosevka-comfy-motion', which is largely
  monospaced and supports ligatures, and (ii) 'iosevka-comfy-motion-duo'
  which is quasi-proportional in its spacing.

  The variants in brief:

  - 'iosevka-comfy' is monospaced and supports ligatures.  Apart from
    ligatures, it allows certain glyphs, such as arrows, to occupy more
    than one block.

  - 'iosevka-comfy-motion' is like 'iosevka-comfy' but with lots of small
    tweaks that add serifs and tailed ends to give a more playful
    impression.

  - 'iosevka-comfy-duo' is quasi-proportional and supports ligatures.  The
    naturally wide glyphs, such as 'm', are allowed to occupy two blocks
    instead of one.

  - 'iosevka-comfy-motion-duo' is like 'iosevka-comfy-duo' but with the
    more playful style of 'iosevka-comfy-motion'.

  - 'iosevka-comfy-fixed' is like 'iosevka-comfy' albeit strictly
    monospaced and thus does not support ligatures.  All glyphs are
    exactly the same width.  Use this if you prefer it or if your
    application (e.g. terminal emulator) does not recognise
    'iosevka-comfy' as a monospaced font.

  - 'iosevka-comfy-wide' is the same as 'iosevka-comfy' except it is
    noticeably wider.  It also looks taller than 'iosevka-comfy' even
    though both variants fit the same number of lines on a screen.

  - 'iosevka-comfy-wide-fixed' same as 'iosevka-comfy-wide' though it is
    strictly monospaced and does not support ligatures.

- Updated all screen shots and reworked the README to better present the
  stylistic variants of Iosevka Comfy.

- The comparison between regular Iosevka and Iosevka Comfy now uses a
  larger font height and displays line numbers.  These help illustrate how
  Iosevka Comfy is more compact than its counterpart (compactness is more
  economical, but also prevents rivers of negative space from flowing
  through the lines; rivers which I find incredibly annoying).
Update section of comparison with Iosevka
Next