font update

This commit is contained in:
minjaesong
2024-05-20 00:56:13 +09:00
parent 4401b7377f
commit 9979153caf
7 changed files with 39 additions and 16 deletions

Binary file not shown.

Binary file not shown.

View File

@@ -24,8 +24,8 @@ class BTeXDocViewer(val doc: BTeXDocument) {
else else
currentPage = page currentPage = page
} }
fun gotoIndex(id: String) { fun getPageOfIndex(id: String): Int {
gotoPage(doc.indexTable[id]!!) return doc.indexTable[id]!!
} }
fun currentPageStr(): String { fun currentPageStr(): String {

View File

@@ -227,7 +227,7 @@ class BTeXDocument : Disposable {
} }
} }
fun serialise(archiveFile: File) { fun serialise(viewer: BTeXDocViewer,archiveFile: File) {
if (!isFinalised) throw IllegalStateException("Document must be finalised before being serialised") if (!isFinalised) throw IllegalStateException("Document must be finalised before being serialised")
val diskFile = ClusteredFormatDOM.createNewArchive(archiveFile, Common.CHARSET, "", 0x7FFFF) val diskFile = ClusteredFormatDOM.createNewArchive(archiveFile, Common.CHARSET, "", 0x7FFFF)
@@ -252,6 +252,26 @@ class BTeXDocument : Disposable {
it.writeBytes(json.encodeToByteArray()) it.writeBytes(json.encodeToByteArray())
} }
val json2 = StringBuilder(); json2.append("{\n")
pages.forEachIndexed { index, page ->
if (page.clickableElements.isNotEmpty()) {
json2.append("\"$index\":[")
page.clickableElements.forEach {
val objStr = "{\"x\":${it.posX},\"y\":${it.posY},\"w\":${it.width},\"h\":${it.height},\"a\":${it.getTargetPage(viewer)}},"
json2.append(objStr)
}
json2.deleteCharAt(json2.length - 1)
json2.append("],\n")
}
}
if (json2.length > 5) json2.deleteCharAt(json2.length - 2) // delete , but not \n
json2.append("}")
Clustfile(DOM, "hrefs.json").also {
it.createNewFile()
it.writeBytes(json2.toString().encodeToByteArray())
}
pagePixmaps.forEachIndexed { index, pixmap -> pagePixmaps.forEachIndexed { index, pixmap ->
Clustfile(DOM, "$index.png").also { file -> Clustfile(DOM, "$index.png").also { file ->
file.createNewFile() file.createNewFile()
@@ -346,7 +366,7 @@ class BTeXDocument : Disposable {
data class BTeXClickable( data class BTeXClickable(
var posX: Int, var posY: Int, val width: Int, val height: Int, val drawUnderline: Boolean = true, var posX: Int, var posY: Int, val width: Int, val height: Int, val drawUnderline: Boolean = true,
val onClick: (BTeXDocViewer) -> Unit, val getTargetPage: (BTeXDocViewer) -> Int,
// val onHover: () -> Unit = {} // val onHover: () -> Unit = {}
) { ) {
var deltaX = 0 var deltaX = 0
@@ -424,7 +444,10 @@ class BTeXPage(
// filter clickable elements that are under the cursor // filter clickable elements that are under the cursor
clickableElements.filter { clickableElements.filter {
it.pointInHitbox(doc, pageRelX, pageRelY) it.pointInHitbox(doc, pageRelX, pageRelY)
}.lastOrNull()?.let { it.onClick(viewer) } }.lastOrNull()?.let {
val target = it.getTargetPage(viewer)
viewer.gotoPage(target)
}
} }
fun isEmpty() = drawCalls.isEmpty() fun isEmpty() = drawCalls.isEmpty()

View File

@@ -375,6 +375,7 @@ object BTeXParser {
if (str.isNotEmpty()) { if (str.isNotEmpty()) {
// printdbg(str)
// rising/falling edge of the hrefId // rising/falling edge of the hrefId
if (currentHrefId != oldHrefTarget) { if (currentHrefId != oldHrefTarget) {
@@ -1676,7 +1677,7 @@ object BTeXParser {
var hrefY = hrefObj.y; if (objectIsSplit) hrefY += doc.lineHeightInPx var hrefY = hrefObj.y; if (objectIsSplit) hrefY += doc.lineHeightInPx
val clickable = BTeXClickable(hrefX, hrefY, getFont().getWidth(substr), doc.lineHeightInPx, false) { viewer -> val clickable = BTeXClickable(hrefX, hrefY, getFont().getWidth(substr), doc.lineHeightInPx, false) { viewer ->
viewer.gotoIndex(hrefObj.hrefTarget) viewer.getPageOfIndex(hrefObj.hrefTarget)
} }
doc.appendClickable(doc.pages[pageNum], clickable); clickables.add(clickable) doc.appendClickable(doc.pages[pageNum], clickable); clickables.add(clickable)
@@ -1751,7 +1752,7 @@ object BTeXParser {
var hrefY = hrefObj.y; if (objectIsSplit) hrefY += doc.lineHeightInPx var hrefY = hrefObj.y; if (objectIsSplit) hrefY += doc.lineHeightInPx
val clickable = BTeXClickable(hrefX, hrefY, getFont().getWidth(substr), doc.lineHeightInPx) { viewer -> val clickable = BTeXClickable(hrefX, hrefY, getFont().getWidth(substr), doc.lineHeightInPx) { viewer ->
viewer.gotoIndex(hrefObj.hrefTarget) viewer.getPageOfIndex(hrefObj.hrefTarget)
} }
doc.appendClickable(doc.pages[pageNum], clickable); clickables.add(clickable) doc.appendClickable(doc.pages[pageNum], clickable); clickables.add(clickable)
@@ -1939,8 +1940,7 @@ object BTeXParser {
val thePage = call.pageObject val thePage = call.pageObject
thePage.appendClickable(BTeXClickable(boxx, boxy, boxw, boxh, false) { thePage.appendClickable(BTeXClickable(boxx, boxy, boxw, boxh, false) {
// printdbg("Goto page p. ${target+1}") target
it.gotoPage(target)
}) })
} }

View File

@@ -33,12 +33,12 @@ import kotlin.system.measureTimeMillis
class BTeXTest : ApplicationAdapter() { class BTeXTest : ApplicationAdapter() {
// val filePath = "btex.xml" // val filePath = "btex.xml"
val filePath = "btex_ko.xml" // val filePath = "btex_ko.xml"
// val filePath = "test.xml" // val filePath = "test.xml"
// val filePath = "literature/en/daniel_defoe_robinson_crusoe.xml" // val filePath = "literature/en/daniel_defoe_robinson_crusoe.xml"
// val filePath = "literature/ruRU/anton_chekhov_palata_no_6.xml" // val filePath = "literature/ruRU/anton_chekhov_palata_no_6.xml"
// val filePath = "literature/koKR/yisang_nalgae.xml" // val filePath = "literature/koKR/yisang_nalgae.xml"
// val filePath = "literature/koKR/yisang_geonchukmuhanyukmyeongakche.xml" val filePath = "literature/koKR/yisang_geonchukmuhanyukmyeongakche.xml"
private lateinit var document: BTeXDocument private lateinit var document: BTeXDocument