typewriter accepting new tagging system

This commit is contained in:
minjaesong
2021-11-25 17:03:11 +09:00
parent 8641c95169
commit 4d1a599263
5 changed files with 17 additions and 80 deletions

View File

@@ -87,8 +87,9 @@ MSB for each word must be set to indicate the value is being used.
-= NOTE =-
This encoding involves one HACK: using 0th diacritics' X-anchor pos as a type selector
This hack applies only when write-on-top bit is set.
The code has remnants of one old HACK: using 0th diacritics' X-anchor pos as a type selector
This hack applied only when write-on-top bit is set. Relevant codes are currently commented out instead of
being completely removed for future debugging.
Interpretation:
DIA_OVERLAY = 1
DIA_JOINER = 2

Binary file not shown.

Before

Width:  |  Height:  |  Size: 320 KiB

After

Width:  |  Height:  |  Size: 320 KiB

View File

@@ -906,7 +906,7 @@ class TerrarumSansBitmap(
extraWidth = thisProp.nudgeX // NOTE: sign is flipped!
}
// FIXME HACK: using 0th diacritics' X-anchor pos as a type selector
else if (thisProp.writeOnTop && thisProp.diacriticsAnchors[0].x == GlyphProps.DIA_JOINER) {
/*else if (thisProp.writeOnTop && thisProp.diacriticsAnchors[0].x == GlyphProps.DIA_JOINER) {
posXbuffer[charIndex] = when (itsProp.alignWhere) {
GlyphProps.ALIGN_RIGHT ->
posXbuffer[nonDiacriticCounter] + W_VAR_INIT + alignmentOffset
@@ -916,7 +916,7 @@ class TerrarumSansBitmap(
posXbuffer[nonDiacriticCounter] + itsProp.width + alignmentOffset
}
}
}*/
else {
// set X pos according to alignment information
posXbuffer[charIndex] = when (thisProp.alignWhere) {
@@ -1372,7 +1372,7 @@ class TerrarumSansBitmap(
if (it.first.matches(maskL!!) && it.second.matches(maskR!!)) {
val contraction = if (glyphProps[prevChar]?.isKernYtype == true || glyphProps[thisChar]?.isKernYtype == true) it.yy else it.bb
dbgprn("Kerning rule match #${index+1}: ${prevChar.toChar()}${thisChar.toChar()}, Rule:${it.first.s} ${it.second.s}; Contraction: $contraction")
// dbgprn("Kerning rule match #${index+1}: ${prevChar.toChar()}${thisChar.toChar()}, Rule:${it.first.s} ${it.second.s}; Contraction: $contraction")
return -contraction
}
@@ -1380,71 +1380,6 @@ class TerrarumSansBitmap(
return 0
}
else 0
/*else if (prevChar in lowHeightLetters) {
return if (thisChar in kernTees) kernTee // lh - T
else if (thisChar in kernYees) kernYee // lh - Y
else 0
}
else if (prevChar in kernElls) {
return if (thisChar in kernTees) kernTee // L - T
else if (thisChar in kernVees) kernYee // L - V
else if (thisChar in kernYees) kernYee // L - Y
else 0
}
else if (prevChar in kernTees) {
return if (thisChar in lowHeightLetters) kernTee // T - lh
else if (thisChar in kernJays) kernTee // T - J
else if (thisChar in kernAyes) kernYee // T - A
else if (thisChar in kernDees) kernTee // T - d
else 0
}
else if (prevChar in kernYees) {
return if (thisChar in lowHeightLetters) kernYee // Y - lh
else if (thisChar in kernAyes) kernYee // Y - A
else if (thisChar in kernJays) kernYee // Y - J
else if (thisChar in kernDees) kernYee // Y - d
else 0
}
else if (prevChar in kernAyes) {
return if (thisChar in kernVees) kernAV // A - V
else if (thisChar in kernTees) kernAV // A - T
else if (thisChar in kernYees) kernYee // A - Y
else 0
}
else if (prevChar in kernVees) {
return if (thisChar in kernAyes) kernAV // V - A
else if (thisChar in kernJays) kernAV // V - J
else if (thisChar in kernDees) kernAV // V - d
else 0
}
else if (prevChar in kernGammas) {
return if (thisChar in kernAyes) kernYee // Γ - Α
else if (thisChar in lowHeightLetters) kernTee // Γ - lh
else if (thisChar in kernJays) kernTee // Γ - J
else if (thisChar in kernDees) kernTee // Γ - d
else 0
}
else if (prevChar in kernBees) {
return if (thisChar in kernTees) kernTee // b - T
else if (thisChar in kernYees) kernYee // b - Y
else 0
}
else if (prevChar in kernLowVees) {
return if (thisChar in kernTees) kernTee
else if (thisChar in kernLowLambdas) kernAVlow
else 0
}
else if (prevChar in kernLowLambdas) {
return if (thisChar in kernTees) kernTee
else if (thisChar in kernLowVees) kernAVlow
else 0
}
else if (prevChar in slashes) {
return if (thisChar in kernDees || thisChar in lowHeightLetters) kernSlash // / - d
else if (thisChar in slashes) kernDoubleSlash
else 0
}
else 0*/
}
companion object {

View File

@@ -223,12 +223,12 @@ class TerrarumTypewriterBitmap(
}
val nudgingBits = pixmap.getPixel(codeStartX, codeStartY + 10).tagify()
val nudgeX = nudgingBits.ushr(16).toByte().toInt() // signed 8-bit int
val nudgeY = nudgingBits.ushr(8).toByte().toInt() // signed 8-bit int
val nudgeX = nudgingBits.ushr(24).toByte().toInt() // signed 8-bit int
val nudgeY = nudgingBits.ushr(16).toByte().toInt() // signed 8-bit int
val diacriticsAnchors = (0..5).map {
val yPos = 11 + (it / 3)
val shift = (2 - (it % 3)) * 8
val yPos = 11 + (it / 3) * 2
val shift = (3 - (it % 3)) * 8
val yPixel = pixmap.getPixel(codeStartX, codeStartY + yPos).tagify()
val xPixel = pixmap.getPixel(codeStartX, codeStartY + yPos + 1).tagify()
val y = (yPixel ushr shift) and 127
@@ -239,14 +239,15 @@ class TerrarumTypewriterBitmap(
DiacriticsAnchor(it, x, y, xUsed, yUsed)
}.toTypedArray()
val alignWhere = (11..12).fold(0) { acc, y -> acc or ((pixmap.getPixel(codeStartX, codeStartY + y).and(255) != 0).toInt() shl y) }
val alignWhere = (0..1).fold(0) { acc, y -> acc or ((pixmap.getPixel(codeStartX, codeStartY + y + 15).and(255) != 0).toInt() shl y) }
val writeOnTop = pixmap.getPixel(codeStartX, codeStartY + 13).and(255) != 0
val writeOnTop = pixmap.getPixel(codeStartX, codeStartY + 17).and(255) != 0
val stackWhere = (14..15).fold(0) { acc, y -> acc or ((pixmap.getPixel(codeStartX, codeStartY + y).and(255) != 0).toInt() shl y) }
val stackWhere = (0..1).fold(0) { acc, y -> acc or ((pixmap.getPixel(codeStartX, codeStartY + y + 18).and(255) != 0).toInt() shl y) }
glyphProps[code] = GlyphProps(width, isLowHeight, nudgeX, nudgeY, diacriticsAnchors, alignWhere, writeOnTop, stackWhere, GlyphProps.DEFAULT_EXTINFO, hasKernData, isKernYtype, kerningMask)
// if (code < 256) dbgprn("${code.charInfo()} width: $width, tags: ${glyphProps[code]}")
// if (nudgingBits != 0) println("${code.charInfo()} nudgeX=$nudgeX, nudgeY=$nudgeY, nudgingBits=0x${nudgingBits.toString(16)}")
// extra info
val extCount = glyphProps[code]?.requiredExtInfoCount() ?: 0
@@ -439,7 +440,7 @@ class TerrarumTypewriterBitmap(
if (!thisProp.writeOnTop) {
posXbuffer[charIndex] = thisProp.nudgeX +
posXbuffer[charIndex] = -thisProp.nudgeX +
when (itsProp.alignWhere) {
GlyphProps.ALIGN_RIGHT ->
posXbuffer[nonDiacriticCounter] + TerrarumSansBitmap.W_VAR_INIT + alignmentOffset + interchar + kerning + extraWidth
@@ -453,7 +454,7 @@ class TerrarumTypewriterBitmap(
stackUpwardCounter = 0
stackDownwardCounter = 0
extraWidth = -thisProp.nudgeX // NOTE: sign is flipped!
extraWidth = thisProp.nudgeX // NOTE: sign is flipped!
}
else if (thisProp.writeOnTop && thisProp.diacriticsAnchors[0].x == GlyphProps.DIA_JOINER) {
posXbuffer[charIndex] = when (itsProp.alignWhere) {