Fix centering of Q variants when occurred in enclosures (#751).

This commit is contained in:
be5invis 2020-11-22 00:09:05 -08:00
parent 85e7d95b39
commit e429b9ec10
2 changed files with 25 additions and 16 deletions

View file

@ -1 +1,2 @@
* Add more alternative exclamation-related ligation sets (`exeqeq-alt-1`, `eqexeq-alt-1`, `eqexeq-dl-alt-1`) (#748).
* Add more alternative exclamation-related ligation sets (`exeqeq-alt-1`, `eqexeq-alt-1`, `eqexeq-dl-alt-1`) (#748).
* Fix centering of `Q` variants when occurred in enclosures (#751).

View file

@ -8,9 +8,11 @@ extern Set
glyph-module
define DECOMPOSABLE true
define NON-DECOMPOSABLE false
define SLOPE-INHERIT nothing
define DECOMPOSABLE true
define NON-DECOMPOSABLE false
define CENTERED true
define NOT-CENTERED false
define SLOPE-INHERIT nothing
glyph-block Autobuild-Enclosure-Shared : begin
glyph-block-import CommonShapes
@ -42,8 +44,15 @@ glyph-block Autobuild-Enclosure-Shared : begin
[query-glyph gniPart].tryBecomeMirrorOf [query-glyph gniRelated] rs
return gniPart
glyph-block-export getGlyphDefaultShift
define [getGlyphDefaultShift bal baly g] : begin
if (g && g.baseAnchors.above && g.baseAnchors.below) : begin
if bal : return : CAP / 2 - [mix baly [mix g.baseAnchors.above.y g.baseAnchors.below.y 0.5] bal]
: else : return : CAP / 2 - [mix g.baseAnchors.above.y g.baseAnchors.below.y 0.5]
return 0
glyph-block-export CollectJobs
define [CollectJobs globallyDecomposable prefix suffix demands] : begin
define [CollectJobs globallyDecomposable centered prefix suffix demands] : begin
local nonDecomposable { }
local decomposableJobs { }
local decomposableRelJobs { }
@ -61,6 +70,8 @@ glyph-block Autobuild-Enclosure-Shared : begin
foreach gr [items-of relatedGlyphs] : if [query-glyph : gr.get g] : begin
if ([query-glyph : gr.get g].advanceWidth != g.advanceWidth)
set demandDecomposable false
if (centered && [getGlyphDefaultShift 0 0 : query-glyph : gr.get g] != [getGlyphDefaultShift 0 0 g])
set demandDecomposable false
local jobsOrig : if demandDecomposable decomposableJobs nonDecomposable
local jobsRel : if demandDecomposable decomposableRelJobs nonDecomposable
@ -97,7 +108,7 @@ glyph-block AutoBuild-Enclosure : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
glyph-block-import Recursive-Build : Miniature Thinner
glyph-block-import Autobuild-Enclosure-Shared : CircNameNoCheck CircName CollectJobs EnsureComponentGlyphT CreateDerivedFontFromJobs applyRelations
glyph-block-import Autobuild-Enclosure-Shared : CircNameNoCheck CircName CollectJobs EnsureComponentGlyphT CreateDerivedFontFromJobs applyRelations getGlyphDefaultShift
define circleWidthClasses {{'NWID' Width 0.12} {'WWID' WideWidth0 0.08}}
define [AdjustDigitCount digits width] : Math.max 1 (digits * Width / width)
@ -135,16 +146,13 @@ glyph-block AutoBuild-Enclosure : begin
local totalWidth 0
local firstDerivedGyph null
local shift 0
foreach [gidPart : items-of parts] : do
local derivedGlyph : miniatureFont.queryByNameEnsured gidPart
if [not firstDerivedGyph] : set firstDerivedGyph derivedGlyph
set totalWidth : totalWidth + derivedGlyph.advanceWidth
local xCompress [Math.min 1 (mockInnerWidth / totalWidth)]
set totalWidth : Math.min mockInnerWidth totalWidth
if (firstDerivedGyph && firstDerivedGyph.baseAnchors.above && firstDerivedGyph.baseAnchors.below) : begin
if bal : set shift : CAP / 2 - [mix baly [mix firstDerivedGyph.baseAnchors.above.y firstDerivedGyph.baseAnchors.below.y 0.5] bal]
: else : set shift : CAP / 2 - [mix firstDerivedGyph.baseAnchors.above.y firstDerivedGyph.baseAnchors.below.y 0.5]
local shift : getGlyphDefaultShift bal baly firstDerivedGyph
local finalParts {}
local accumulatedAdvanceSoFar 0
@ -207,7 +215,7 @@ glyph-block AutoBuild-Enclosure : begin
define [EnclosureT prefix builder slopeAngle digits demands fnEnclosure] : begin
foreach {suffix ww gap} [items-of circleWidthClasses] : do
define jobs : CollectJobs builder.decomposable (prefix + digits) suffix demands
define jobs : CollectJobs builder.decomposable CENTERED (prefix + digits) suffix demands
define miniatureFont : CreateDerivedFontFromJobs jobs {} : CircledMiniatureFont slopeAngle digits ww
define gnEnclosure : CircName null (prefix + digits + '.enclosure') {} suffix
if [not : query-glyph gnEnclosure] : create-glyph gnEnclosure : fnEnclosure digits ww gap
@ -354,7 +362,7 @@ glyph-block AutoBuild-Enclosure : begin
define [BracedT rawPrefix digits demands fnBraceShape] : foreach {suffix ww} [items-of circleWidthClasses] : do
define prefix : rawPrefix + digits
define jobs : CollectJobs DECOMPOSABLE prefix suffix demands
define jobs : CollectJobs DECOMPOSABLE CENTERED prefix suffix demands
define miniatureFont : CreateDerivedFontFromJobs jobs {} : lambda [gs] : Miniature
glyphs -- gs
crowd -- [BraceCrowd digits ww]
@ -444,7 +452,7 @@ glyph-block AutoBuild-Enclosure : begin
define [DottedScale digits width] : 1 / [Math.pow [AdjustDigitCount digits width] 0.5]
define [createDottedGlyphs digits gidDot demands] : begin
foreach {suffix ww} [items-of circleWidthClasses] : do
define jobs : CollectJobs DECOMPOSABLE ('dotted' + digits) suffix demands
define jobs : CollectJobs DECOMPOSABLE NOT-CENTERED ('dotted' + digits) suffix demands
local miniatureFont : CreateDerivedFontFromJobs jobs {gidDot} : lambda [gs]: Miniature
glyphs -- gs
@ -704,7 +712,7 @@ glyph-block Autobuild-Fractions : if [not recursive] : begin
glyph-block-import Autobuild-Enclosure-Shared : CollectJobs EnsureComponentGlyphT CreateDerivedFontFromJobs applyRelations
define [createFracImpl prefix demands fine scaleFactor closing] : begin
local jobs : CollectJobs DECOMPOSABLE prefix '' demands
local jobs : CollectJobs DECOMPOSABLE NOT-CENTERED prefix '' demands
define miniatureFont : CreateDerivedFontFromJobs jobs {} : lambda [gs] : Miniature
glyphs -- gs
crowd -- 3.5
@ -816,7 +824,7 @@ glyph-block AutoBuild-Accented-Equal : if [not recursive] : begin
define [createAccentedOp gnBase crowd scale shiftX shiftY demands] : begin
define prefix : 'accent-op{' + gnBase + '}{' + [{crowd scale shiftX shiftY}.join '-'] + '}'
local jobs : CollectJobs DECOMPOSABLE prefix '' demands
local jobs : CollectJobs DECOMPOSABLE NOT-CENTERED prefix '' demands
local dFont : CreateDerivedFontFromJobs jobs {} : lambda [gs] : Miniature
glyphs -- gs
crowd -- crowd
@ -931,7 +939,7 @@ glyph-block Autobuild-Ligatures : if [not recursive] : begin
define [createLigatures prefix _shrink1 _shrink2 wadj1 wadj2 demands] : for-width-kinds WideWidth2
local ww : if FMosaicWide MosaicWidth (MosaicWidth * para.diversityM)
local jobs : CollectJobs DECOMPOSABLE prefix MosaicNameSuffix demands
local jobs : CollectJobs DECOMPOSABLE NOT-CENTERED prefix MosaicNameSuffix demands
local shrink1 : if FMosaicWide 1 [clamp 0 1 (_shrink1 * ww / Width)]
local shrink2 : if FMosaicWide 1 [clamp 0 1 (_shrink2 * ww / Width)]
local df1 : CreateDerivedFontFromJobs jobs {} : lambda [gs] : Thinner gs shrink1