mirror of
https://github.com/curioustorvald/Terrarum-sans-bitmap.git
synced 2026-06-09 23:44:04 +09:00
typewriter accepting new tagging system
This commit is contained in:
@@ -87,8 +87,9 @@ MSB for each word must be set to indicate the value is being used.
|
|||||||
|
|
||||||
-= NOTE =-
|
-= NOTE =-
|
||||||
|
|
||||||
This encoding involves one HACK: using 0th diacritics' X-anchor pos as a type selector
|
The code has remnants of one old HACK: using 0th diacritics' X-anchor pos as a type selector
|
||||||
This hack applies only when write-on-top bit is set.
|
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:
|
Interpretation:
|
||||||
DIA_OVERLAY = 1
|
DIA_OVERLAY = 1
|
||||||
DIA_JOINER = 2
|
DIA_JOINER = 2
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 320 KiB After Width: | Height: | Size: 320 KiB |
@@ -906,7 +906,7 @@ class TerrarumSansBitmap(
|
|||||||
extraWidth = thisProp.nudgeX // NOTE: sign is flipped!
|
extraWidth = thisProp.nudgeX // NOTE: sign is flipped!
|
||||||
}
|
}
|
||||||
// FIXME HACK: using 0th diacritics' X-anchor pos as a type selector
|
// 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) {
|
posXbuffer[charIndex] = when (itsProp.alignWhere) {
|
||||||
GlyphProps.ALIGN_RIGHT ->
|
GlyphProps.ALIGN_RIGHT ->
|
||||||
posXbuffer[nonDiacriticCounter] + W_VAR_INIT + alignmentOffset
|
posXbuffer[nonDiacriticCounter] + W_VAR_INIT + alignmentOffset
|
||||||
@@ -916,7 +916,7 @@ class TerrarumSansBitmap(
|
|||||||
posXbuffer[nonDiacriticCounter] + itsProp.width + alignmentOffset
|
posXbuffer[nonDiacriticCounter] + itsProp.width + alignmentOffset
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
else {
|
else {
|
||||||
// set X pos according to alignment information
|
// set X pos according to alignment information
|
||||||
posXbuffer[charIndex] = when (thisProp.alignWhere) {
|
posXbuffer[charIndex] = when (thisProp.alignWhere) {
|
||||||
@@ -1372,7 +1372,7 @@ class TerrarumSansBitmap(
|
|||||||
if (it.first.matches(maskL!!) && it.second.matches(maskR!!)) {
|
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
|
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
|
return -contraction
|
||||||
}
|
}
|
||||||
@@ -1380,71 +1380,6 @@ class TerrarumSansBitmap(
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
else 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 {
|
companion object {
|
||||||
|
|||||||
@@ -223,12 +223,12 @@ class TerrarumTypewriterBitmap(
|
|||||||
}
|
}
|
||||||
|
|
||||||
val nudgingBits = pixmap.getPixel(codeStartX, codeStartY + 10).tagify()
|
val nudgingBits = pixmap.getPixel(codeStartX, codeStartY + 10).tagify()
|
||||||
val nudgeX = nudgingBits.ushr(16).toByte().toInt() // signed 8-bit int
|
val nudgeX = nudgingBits.ushr(24).toByte().toInt() // signed 8-bit int
|
||||||
val nudgeY = nudgingBits.ushr(8).toByte().toInt() // signed 8-bit int
|
val nudgeY = nudgingBits.ushr(16).toByte().toInt() // signed 8-bit int
|
||||||
|
|
||||||
val diacriticsAnchors = (0..5).map {
|
val diacriticsAnchors = (0..5).map {
|
||||||
val yPos = 11 + (it / 3)
|
val yPos = 11 + (it / 3) * 2
|
||||||
val shift = (2 - (it % 3)) * 8
|
val shift = (3 - (it % 3)) * 8
|
||||||
val yPixel = pixmap.getPixel(codeStartX, codeStartY + yPos).tagify()
|
val yPixel = pixmap.getPixel(codeStartX, codeStartY + yPos).tagify()
|
||||||
val xPixel = pixmap.getPixel(codeStartX, codeStartY + yPos + 1).tagify()
|
val xPixel = pixmap.getPixel(codeStartX, codeStartY + yPos + 1).tagify()
|
||||||
val y = (yPixel ushr shift) and 127
|
val y = (yPixel ushr shift) and 127
|
||||||
@@ -239,14 +239,15 @@ class TerrarumTypewriterBitmap(
|
|||||||
DiacriticsAnchor(it, x, y, xUsed, yUsed)
|
DiacriticsAnchor(it, x, y, xUsed, yUsed)
|
||||||
}.toTypedArray()
|
}.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)
|
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
|
// extra info
|
||||||
val extCount = glyphProps[code]?.requiredExtInfoCount() ?: 0
|
val extCount = glyphProps[code]?.requiredExtInfoCount() ?: 0
|
||||||
@@ -439,7 +440,7 @@ class TerrarumTypewriterBitmap(
|
|||||||
|
|
||||||
|
|
||||||
if (!thisProp.writeOnTop) {
|
if (!thisProp.writeOnTop) {
|
||||||
posXbuffer[charIndex] = thisProp.nudgeX +
|
posXbuffer[charIndex] = -thisProp.nudgeX +
|
||||||
when (itsProp.alignWhere) {
|
when (itsProp.alignWhere) {
|
||||||
GlyphProps.ALIGN_RIGHT ->
|
GlyphProps.ALIGN_RIGHT ->
|
||||||
posXbuffer[nonDiacriticCounter] + TerrarumSansBitmap.W_VAR_INIT + alignmentOffset + interchar + kerning + extraWidth
|
posXbuffer[nonDiacriticCounter] + TerrarumSansBitmap.W_VAR_INIT + alignmentOffset + interchar + kerning + extraWidth
|
||||||
@@ -453,7 +454,7 @@ class TerrarumTypewriterBitmap(
|
|||||||
|
|
||||||
stackUpwardCounter = 0
|
stackUpwardCounter = 0
|
||||||
stackDownwardCounter = 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) {
|
else if (thisProp.writeOnTop && thisProp.diacriticsAnchors[0].x == GlyphProps.DIA_JOINER) {
|
||||||
posXbuffer[charIndex] = when (itsProp.alignWhere) {
|
posXbuffer[charIndex] = when (itsProp.alignWhere) {
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user