fix: stack-down diacritic with nudge-Y values for both Kotlin and OTF

This commit is contained in:
minjaesong
2026-02-26 11:19:21 +09:00
parent f55f90352b
commit 3e3e20e5d4
3 changed files with 10 additions and 4 deletions

Binary file not shown.

View File

@@ -281,7 +281,13 @@ def build_font(assets_dir, output_path, no_bitmap=False, no_features=False):
if advance == 0: if advance == 0:
x_offset -= g.props.nudge_x * SCALE x_offset -= g.props.nudge_x * SCALE
y_offset = -g.props.nudge_y * SCALE # For STACK_DOWN marks (below-base diacritics), negative nudge_y
# means "shift content down to below baseline". The sign convention
# is opposite to non-marks where positive nudge_y means shift down.
if g.props.stack_where == SC.STACK_DOWN and g.props.write_on_top >= 0:
y_offset = g.props.nudge_y * SCALE
else:
y_offset = -g.props.nudge_y * SCALE
contours = trace_bitmap(g.bitmap, g.props.width) contours = trace_bitmap(g.bitmap, g.props.width)

View File

@@ -1250,7 +1250,7 @@ class TerrarumSansBitmap(
// set Y pos according to diacritics position // set Y pos according to diacritics position
when (thisProp.stackWhere) { when (thisProp.stackWhere) {
GlyphProps.STACK_DOWN -> { GlyphProps.STACK_DOWN -> {
posYbuffer[charIndex] = -thisProp.nudgeY + (H_DIACRITICS * stackDownwardCounter + -thisProp.nudgeY) * flipY.toSign() posYbuffer[charIndex] = (-thisProp.nudgeY + H_DIACRITICS * stackDownwardCounter) * flipY.toSign()
stackDownwardCounter++ stackDownwardCounter++
} }
GlyphProps.STACK_UP -> { GlyphProps.STACK_UP -> {
@@ -1272,11 +1272,11 @@ class TerrarumSansBitmap(
// dbgprn("lastNonDiacriticChar: ${lastNonDiacriticChar.charInfo()}; stack counter: $stackUpwardCounter") // dbgprn("lastNonDiacriticChar: ${lastNonDiacriticChar.charInfo()}; stack counter: $stackUpwardCounter")
} }
GlyphProps.STACK_UP_N_DOWN -> { GlyphProps.STACK_UP_N_DOWN -> {
posYbuffer[charIndex] = -thisProp.nudgeY + (H_DIACRITICS * stackDownwardCounter + -thisProp.nudgeY) * flipY.toSign() posYbuffer[charIndex] = (-thisProp.nudgeY + H_DIACRITICS * stackDownwardCounter) * flipY.toSign()
stackDownwardCounter++ stackDownwardCounter++
posYbuffer[charIndex] = -thisProp.nudgeY + (-H_DIACRITICS * stackUpwardCounter + -thisProp.nudgeY) * flipY.toSign() posYbuffer[charIndex] = (-thisProp.nudgeY + -H_DIACRITICS * stackUpwardCounter) * flipY.toSign()
// shift down on lowercase if applicable // shift down on lowercase if applicable
if (getSheetType(thisChar) in autoShiftDownOnLowercase && if (getSheetType(thisChar) in autoShiftDownOnLowercase &&
lastNonDiacriticChar.isLowHeight()) { lastNonDiacriticChar.isLowHeight()) {