diff --git a/assets/graphics/fonts/terrarum-sans-bitmap/kana.tga b/assets/graphics/fonts/terrarum-sans-bitmap/kana.tga deleted file mode 100755 index 62fd68b15..000000000 --- a/assets/graphics/fonts/terrarum-sans-bitmap/kana.tga +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:05fff19d873b8c484d0aeed11a0dc13412468a71a7eaf0bc0147681f8b7905c8 -size 215058 diff --git a/assets/graphics/fonts/terrarum-sans-bitmap/kana_variable.tga b/assets/graphics/fonts/terrarum-sans-bitmap/kana_variable.tga new file mode 100644 index 000000000..29c69f17f --- /dev/null +++ b/assets/graphics/fonts/terrarum-sans-bitmap/kana_variable.tga @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:daa80cfe1f516fb482fe2d95abcd4d2205249c956a4fa93f1c65737eb78a8ebd +size 327698 diff --git a/lib/TerrarumSansBitmap.jar b/lib/TerrarumSansBitmap.jar index 553627f16..d64243f84 100644 --- a/lib/TerrarumSansBitmap.jar +++ b/lib/TerrarumSansBitmap.jar @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d75125eff82a33a69b6bc7c73dc6289b4e3db0725ead99dbd49cc7a8582c7563 -size 207410 +oid sha256:d8153141e2588aaf8ba4ef5ad01efbbcdbab41d1e89f5b5b3613a5a351a5d5fb +size 207672 diff --git a/src/net/torvald/btex/BTeXDocViewer.kt b/src/net/torvald/btex/BTeXDocViewer.kt index cdd6e8404..e52c77b0b 100644 --- a/src/net/torvald/btex/BTeXDocViewer.kt +++ b/src/net/torvald/btex/BTeXDocViewer.kt @@ -24,8 +24,8 @@ class BTeXDocViewer(val doc: BTeXDocument) { else currentPage = page } - fun gotoIndex(id: String) { - gotoPage(doc.indexTable[id]!!) + fun getPageOfIndex(id: String): Int { + return doc.indexTable[id]!! } fun currentPageStr(): String { diff --git a/src/net/torvald/btex/BTeXDocument.kt b/src/net/torvald/btex/BTeXDocument.kt index e5ed616b9..9ba07f6cc 100644 --- a/src/net/torvald/btex/BTeXDocument.kt +++ b/src/net/torvald/btex/BTeXDocument.kt @@ -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") val diskFile = ClusteredFormatDOM.createNewArchive(archiveFile, Common.CHARSET, "", 0x7FFFF) @@ -252,6 +252,26 @@ class BTeXDocument : Disposable { 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 -> Clustfile(DOM, "$index.png").also { file -> file.createNewFile() @@ -346,7 +366,7 @@ class BTeXDocument : Disposable { data class BTeXClickable( 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 = {} ) { var deltaX = 0 @@ -424,7 +444,10 @@ class BTeXPage( // filter clickable elements that are under the cursor clickableElements.filter { it.pointInHitbox(doc, pageRelX, pageRelY) - }.lastOrNull()?.let { it.onClick(viewer) } + }.lastOrNull()?.let { + val target = it.getTargetPage(viewer) + viewer.gotoPage(target) + } } fun isEmpty() = drawCalls.isEmpty() diff --git a/src/net/torvald/btex/BTeXParser.kt b/src/net/torvald/btex/BTeXParser.kt index 1e7a23a18..dae60cf4d 100644 --- a/src/net/torvald/btex/BTeXParser.kt +++ b/src/net/torvald/btex/BTeXParser.kt @@ -375,6 +375,7 @@ object BTeXParser { if (str.isNotEmpty()) { +// printdbg(str) // rising/falling edge of the hrefId if (currentHrefId != oldHrefTarget) { @@ -1676,7 +1677,7 @@ object BTeXParser { var hrefY = hrefObj.y; if (objectIsSplit) hrefY += doc.lineHeightInPx 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) @@ -1751,7 +1752,7 @@ object BTeXParser { var hrefY = hrefObj.y; if (objectIsSplit) hrefY += doc.lineHeightInPx 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) @@ -1939,8 +1940,7 @@ object BTeXParser { val thePage = call.pageObject thePage.appendClickable(BTeXClickable(boxx, boxy, boxw, boxh, false) { -// printdbg("Goto page p. ${target+1}") - it.gotoPage(target) + target }) } diff --git a/src/net/torvald/terrarum/tests/BTeXTest.kt b/src/net/torvald/terrarum/tests/BTeXTest.kt index a7051b9f7..c37d6459f 100644 --- a/src/net/torvald/terrarum/tests/BTeXTest.kt +++ b/src/net/torvald/terrarum/tests/BTeXTest.kt @@ -33,12 +33,12 @@ import kotlin.system.measureTimeMillis class BTeXTest : ApplicationAdapter() { // val filePath = "btex.xml" - val filePath = "btex_ko.xml" +// val filePath = "btex_ko.xml" // val filePath = "test.xml" // val filePath = "literature/en/daniel_defoe_robinson_crusoe.xml" // val filePath = "literature/ruRU/anton_chekhov_palata_no_6.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