diff --git a/assets/mods/basegame/books/btex.xml b/assets/mods/basegame/books/btex.xml index 1fa139b35..e0d7dfccb 100644 --- a/assets/mods/basegame/books/btex.xml +++ b/assets/mods/basegame/books/btex.xml @@ -23,11 +23,11 @@ - + diff --git a/lib/TerrarumSansBitmap.jar b/lib/TerrarumSansBitmap.jar index 3ab5f8804..ed0bfe912 100644 --- a/lib/TerrarumSansBitmap.jar +++ b/lib/TerrarumSansBitmap.jar @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9ff026c4d537e23fbe908f9d97229789f5e4a99c19a01a2a9f9bd4c803b373d6 -size 191888 +oid sha256:f5c8719dea24cc85ea634a168bc7763ca4612030714b7750e54d985630e15cc1 +size 193329 diff --git a/src/net/torvald/btex/BTeXDocument.kt b/src/net/torvald/btex/BTeXDocument.kt index e82705353..2850f2d2e 100644 --- a/src/net/torvald/btex/BTeXDocument.kt +++ b/src/net/torvald/btex/BTeXDocument.kt @@ -54,7 +54,7 @@ class BTeXDocument : Disposable { companion object { val DEFAULT_PAGE_BACK = Color(0xe0dfdb_ff.toInt()) - val DEFAULT_PAGE_FORE = Color(0x0a0706_ff) +// val DEFAULT_PAGE_FORE = Color(0x0a0706_ff) val DEFAULT_ORNAMENTS_COL = Color(0x3f3c3b_ff) private fun String.escape() = this.replace("\"", "\\\"") @@ -329,7 +329,6 @@ class BTeXDrawCall( var posX: Int, // position relative to the page start (excluding page margin) var posY: Int, // position relative to the page start (excluding page margin) val theme: String, - var colour: Color, val text: BTeXTextDrawCall? = null, val texture: TextureRegion? = null, ) { @@ -347,7 +346,7 @@ class BTeXDrawCall( println("code themed") } - batch.color = colour + batch.color = Color.WHITE if (text != null && texture == null) { text.draw(doc, batch, px, py) diff --git a/src/net/torvald/btex/BTeXParser.kt b/src/net/torvald/btex/BTeXParser.kt index 96050a284..3b46a251b 100644 --- a/src/net/torvald/btex/BTeXParser.kt +++ b/src/net/torvald/btex/BTeXParser.kt @@ -8,7 +8,6 @@ import net.torvald.colourutil.tosRGB import net.torvald.terrarum.App import net.torvald.terrarum.btex.BTeXDocument import net.torvald.terrarum.btex.BTeXDocument.Companion.DEFAULT_ORNAMENTS_COL -import net.torvald.terrarum.btex.BTeXDocument.Companion.DEFAULT_PAGE_FORE import net.torvald.terrarum.btex.BTeXDrawCall import net.torvald.terrarum.btex.TypesetDrawCall import net.torvald.terrarum.ceilToFloat @@ -62,9 +61,6 @@ object BTeXParser { } class BTeXHandler(val doc: BTeXDocument) : DefaultHandler() { - private val DEFAULT_FONTCOL = DEFAULT_PAGE_FORE - private val LINE_HEIGHT = doc.lineHeightInPx - private var cover = "" private var inner = "" private var papersize = "" @@ -216,14 +212,13 @@ object BTeXParser { String(ch.sliceArray(start until start + length)).replace('\n', ' ').replace(Regex(" +"), " ")//.trim() if (str.isNotEmpty()) { -// printdbg("Characters [col:${spanColour}] \t\"$str\"") - if (spanColour != oldSpanColour || spanColour != null) { +// printdbg("Characters [col:${spanColour}] \t\"$str\"") val spanGdxCol = getSpanColourOrNull() if (spanGdxCol == null) { - paragraphBuffer.append(TerrarumSansBitmap.noColorCode) + paragraphBuffer.append(ccDefault) } else { paragraphBuffer.append(TerrarumSansBitmap.toColorCode( @@ -234,9 +229,8 @@ object BTeXParser { } } - else { - paragraphBuffer.append(str) - } + + paragraphBuffer.append(str) oldSpanColour = spanColour } @@ -257,7 +251,7 @@ object BTeXParser { private fun getFont() = when (cover) { "typewriter" -> TODO() else -> { - if (!::testFont.isInitialized) testFont = TerrarumSansBitmap(App.FONT_DIR, shadowAlpha = bodyTextShadowAlpha, textCacheSize = 65536) + if (!::testFont.isInitialized) testFont = TerrarumSansBitmap(App.FONT_DIR, shadowAlpha = bodyTextShadowAlpha, textCacheSize = 4096) testFont } } @@ -282,7 +276,7 @@ object BTeXParser { private fun getSpanColourOrNull() = if (spanColour == null) null else getSpanColour() - private fun getSpanColour(): Color = if (spanColour == null) DEFAULT_FONTCOL + private fun getSpanColour(): Color = if (spanColour == null) Color.BLACK else if (spanColour!!.matches(hexColRegexRGB)) { val rs = spanColour!!.substring(1,3) val gs = spanColour!!.substring(3,5) @@ -306,7 +300,7 @@ object BTeXParser { Color(r, g, b, 1f) } else - spanColourMap.getOrDefault(spanColour, DEFAULT_FONTCOL) + spanColourMap.getOrDefault(spanColour, Color.BLACK) // list of CSS named colours (list supports up to CSS Colors Level 4) private val spanColourMap = hashMapOf( @@ -489,8 +483,6 @@ object BTeXParser { private val ccEmph = "#C11"// TerrarumSansBitmap.toColorCode(0xfd44) private val ccItemName = "#14C" // TerrarumSansBitmap.toColorCode(0xf37d) private val ccTargetName = "#170" // TerrarumSansBitmap.toColorCode(0xf3c4) -// private val ccReset = TerrarumSansBitmap.noColorCode - @OpenTag // reflective access is impossible with 'private' fun processElemBTEXDOC(handler: BTeXHandler, doc: BTeXDocument, uri: String, attribs: HashMap) { @@ -730,7 +722,7 @@ object BTeXParser { @CloseTag fun closeElemANONBREAK(handler: BTeXHandler, doc: BTeXDocument, uri: String, siblingIndex: Int) { - typesetParagraphs("――――――――――――", handler).also {it.first().let { + typesetParagraphs("${ccDefault}――――――――――――", handler).also {it.first().let { it.posX += (doc.textWidth - it.width) / 2 } } doc.linesPrintedOnPage[doc.currentPage] = (doc.linesPrintedOnPage[doc.currentPage] - 1).coerceAtLeast(0) @@ -742,9 +734,6 @@ object BTeXParser { handler.spanColour = null if (hasCover) { - doc.pages[0].drawCalls.forEach { - it.colour = Color.WHITE - } doc.addNewPage() } } @@ -843,7 +832,7 @@ object BTeXParser { else if (penultTag == "MANUSCRIPT") "\n\n$thePar" else thePar - typesetParagraphs(text, handler) + typesetParagraphs(ccDefault + text, handler) handler.paragraphBuffer.clear() } @@ -864,7 +853,7 @@ object BTeXParser { private fun typesetBookTitle(thePar: String, handler: BTeXHandler) { - val label = "\n" + thePar + val label = "\n${TerrarumSansBitmap.toColorCode(15, 15, 15)}" + thePar typesetParagraphs(getTitleFont(), label, handler, doc.textWidth - 16).also { val addedLines = it.sumOf { it.lineCount } doc.linesPrintedOnPage[doc.currentPage] += addedLines @@ -876,7 +865,7 @@ object BTeXParser { } private fun typesetBookAuthor(thePar: String, handler: BTeXHandler) { - typesetParagraphs(getSubtitleFont(), "\n\n" + thePar, handler, doc.textWidth - 16).also { + typesetParagraphs(getSubtitleFont(), "\n\n${TerrarumSansBitmap.toColorCode(15, 15, 15)}" + thePar, handler, doc.textWidth - 16).also { it.last().extraDrawFun = { batch, x, y -> val px = x val py = y + 23 @@ -894,7 +883,7 @@ object BTeXParser { } private fun typesetBookEdition(thePar: String, handler: BTeXHandler) { - typesetParagraphs(getSubtitleFont(), thePar, handler, doc.textWidth - 16).also { + typesetParagraphs(getSubtitleFont(), "${TerrarumSansBitmap.toColorCode(15, 15, 15)}" + thePar, handler, doc.textWidth - 16).also { it.forEach { it.posX += 8 } @@ -902,7 +891,7 @@ object BTeXParser { } private fun typesetChapterHeading(thePar: String, handler: BTeXHandler, indent: Int = 16, width: Int = doc.textWidth) { - typesetParagraphs("\n"+thePar, handler, width - indent).also { + typesetParagraphs("\n$ccDefault"+thePar, handler, width - indent).also { // add indents and adjust text y pos it.forEach { it.posX += indent @@ -923,7 +912,7 @@ object BTeXParser { } private fun typesetSectionHeading(thePar: String, handler: BTeXHandler, indent: Int = 16, width: Int = doc.textWidth) { - typesetParagraphs("\n"+thePar, handler, width - indent).also { + typesetParagraphs("\n$ccDefault"+thePar, handler, width - indent).also { // add indents and adjust text y pos it.forEach { it.posX += indent @@ -956,7 +945,6 @@ object BTeXParser { 0, doc.linesPrintedOnPage[pageNum] * doc.lineHeightInPx, handler.currentTheme, - handler.getSpanColour(), TypesetDrawCall(slugs, subset.first, subset.second) ) @@ -978,7 +966,6 @@ object BTeXParser { 0, doc.linesPrintedOnPage[pageNum] * doc.lineHeightInPx, handler.currentTheme, - handler.getSpanColour(), TypesetDrawCall(slugs, subset.first, subset.second) ) @@ -1020,13 +1007,17 @@ object BTeXParser { val pageNumWidth = getFont().getWidth(pageNum) val typeWidth = doc.textWidth - indentation - typesetParagraphs(name, handler, typeWidth, pageToWrite ?: doc.currentPage).let { + typesetParagraphs(ccDefault + name, handler, typeWidth, pageToWrite ?: doc.currentPage).let { it.forEach { it.posX += indentation } it.last().let { call -> call.extraDrawFun = { batch, x, y -> + val oldCol = batch.color.cpy() + + batch.color = Color.BLACK + val font = getFont() val dotGap = 10 val y = y + (call.lineCount - 1).coerceAtLeast(0) * doc.lineHeightInPx @@ -1043,6 +1034,8 @@ object BTeXParser { } font.draw(batch, pageNum, x + typeWidth - pageNumWidth.toFloat(), y) + + batch.color = oldCol } } } @@ -1050,6 +1043,8 @@ object BTeXParser { companion object { + val ccDefault = TerrarumSansBitmap.toColorCode(0,0,0) + private const val ZWSP = 0x200B private const val SHY = 0xAD private const val NBSP = 0xA0 diff --git a/src/net/torvald/terrarum/tests/BTeXTest.kt b/src/net/torvald/terrarum/tests/BTeXTest.kt index d1df3f8a5..1443526a1 100644 --- a/src/net/torvald/terrarum/tests/BTeXTest.kt +++ b/src/net/torvald/terrarum/tests/BTeXTest.kt @@ -26,8 +26,8 @@ import kotlin.system.measureTimeMillis */ class BTeXTest : ApplicationAdapter() { -// val filePath = "btex.xml" - val filePath = "literature/en/daniel_defoe_robinson_crusoe.btexbin" + val filePath = "btex.xml" +// val filePath = "literature/en/daniel_defoe_robinson_crusoe.btexbin" // val filePath = "literature/ruRU/anton_chekhov_palata_no_6.btexbin" // val filePath = "literature/koKR/yisang_nalgae.btexbin" @@ -59,7 +59,7 @@ class BTeXTest : ApplicationAdapter() { println("Time spent on typesetting [ms]: $it") } - measureTimeMillis { + /*measureTimeMillis { document.finalise() documentHandler.dispose() }.also { @@ -70,7 +70,7 @@ class BTeXTest : ApplicationAdapter() { document.serialise(File("./assets/mods/basegame/books/${filePath.replace(".xml", ".btexbin")}")) }.also { println("Time spent on serialisation [ms]: $it") - } + }*/ } else { measureTimeMillis {