more btex; sheet metal item

This commit is contained in:
minjaesong
2024-05-05 02:16:33 +09:00
parent 92a4084e95
commit f45a2ce1d9
9 changed files with 191 additions and 46 deletions

View File

@@ -20,9 +20,11 @@ import net.torvald.terrarum.ui.Toolkit
import net.torvald.terrarumsansbitmap.MovableType
import net.torvald.terrarumsansbitmap.gdx.CodepointSequence
import net.torvald.terrarumsansbitmap.gdx.TerrarumSansBitmap
import net.torvald.unicode.CURRENCY
import net.torvald.unicode.toUTF8Bytes
import org.xml.sax.Attributes
import org.xml.sax.InputSource
import org.xml.sax.SAXParseException
import org.xml.sax.helpers.DefaultHandler
import java.io.File
import java.io.FileInputStream
@@ -41,26 +43,26 @@ object BTeXParser {
internal val textTags = hashSetOf("P", "PBOX", "TITLE", "AUTHOR", "EDITION", "CHAPTER", "SECTION", "LI")
internal val textDecorTags = hashSetOf("SPAN", "CODE")
operator fun invoke(file: FileHandle) = invoke(file.file())
operator fun invoke(file: FileHandle, varMap: Map<String, String>) = invoke(file.file(), varMap)
operator fun invoke(file: File): Pair<BTeXDocument, BTeXHandler> {
operator fun invoke(file: File, varMap: Map<String, String>): Pair<BTeXDocument, BTeXHandler> {
val doc = BTeXDocument()
val parser = SAXParserFactory.newDefaultInstance().newSAXParser()
val stream = FileInputStream(file)
val handler = BTeXHandler(doc)
val handler = BTeXHandler(doc, varMap)
parser.parse(stream, handler)
return doc to handler
}
operator fun invoke(string: String): Pair<BTeXDocument, BTeXHandler> {
operator fun invoke(string: String, varMap: Map<String, String>): Pair<BTeXDocument, BTeXHandler> {
val doc = BTeXDocument()
val parser = SAXParserFactory.newDefaultInstance().newSAXParser()
val handler = BTeXHandler(doc)
val handler = BTeXHandler(doc, varMap)
parser.parse(InputSource(StringReader(string)), handler)
return doc to handler
}
class BTeXHandler(val doc: BTeXDocument) : DefaultHandler() {
class BTeXHandler(val doc: BTeXDocument, val varMap: Map<String, String>) : DefaultHandler() {
private var cover = ""
private var inner = ""
private var papersize = ""
@@ -80,6 +82,7 @@ object BTeXParser {
private var currentTheme = ""
private var spanColour: String? = null
private var codeMode: Boolean = false
private var bucksMode: Boolean = false
private val elemOpeners: HashMap<String, KFunction<*>> = HashMap()
@@ -185,9 +188,9 @@ object BTeXParser {
override fun draw(doc: BTeXDocument, batch: SpriteBatch, x: Float, y: Float, font: TerrarumSansBitmap?) {
val oldcol = batch.color.cpy()
batch.color = Color(0xccccccff.toInt())
Toolkit.fillArea(batch, x - 2, y - 1, width + 4f, doc.lineHeightInPx + 2f)
Toolkit.fillArea(batch, x - 2, y, width + 4f, doc.lineHeightInPx.toFloat())
batch.color = Color(0x999999ff.toInt())
Toolkit.drawBoxBorder(batch, x - 2, y - 1, width + 4f, doc.lineHeightInPx + 2f)
Toolkit.drawBoxBorder(batch, x - 2, y, width + 4f, doc.lineHeightInPx.toFloat())
batch.color = oldcol
}
}
@@ -202,6 +205,18 @@ object BTeXParser {
if (::subtitleFont.isInitialized) subtitleFont.tryDispose()
}
override fun warning(e: SAXParseException) {
e.printStackTrace()
}
override fun error(e: SAXParseException) {
throw e
}
override fun fatalError(e: SAXParseException) {
throw e
}
private fun printdbg(message: String?) {
val CSI = "\u001B[32m"
val timeNow = System.currentTimeMillis()
@@ -284,16 +299,17 @@ object BTeXParser {
private var oldSpanColour: String? = null
private var oldCodeMode = false
private var oldBucksMode = false
private val CODE_TAG_MARGIN = 2
override fun characters(ch: CharArray, start: Int, length: Int) {
var str =
val str =
String(ch.sliceArray(start until start + length)).replace('\n', ' ').replace(Regex(" +"), " ")//.trim()
if (str.isNotEmpty()) {
printdbg("Characters [col:${spanColour}] \t\"$str\"")
// process span request
if (spanColour != oldSpanColour || spanColour != null) {
// printdbg("Characters [col:${spanColour}] \t\"$str\"")
val spanGdxCol = getSpanColourOrNull()
@@ -311,13 +327,12 @@ object BTeXParser {
// process code request
if (codeMode != oldCodeMode || codeMode) {
if (!codeMode) {
paragraphBuffer.append(TerrarumSansBitmap.charsetOverrideDefault)
paragraphBuffer.append(glueToString(CODE_TAG_MARGIN))
}
else {
println("CODE tag for str '$str'")
// println("CODE tag for str '$str'")
val w = getFont().getWidth(str) + 2*CODE_TAG_MARGIN
getOrPutCodeTagRef(w)
paragraphBuffer.appendObjectPlaceholder("TAG@CODE-${w}")
@@ -326,12 +341,25 @@ object BTeXParser {
}
}
// process bucks request
if (bucksMode != oldBucksMode || bucksMode) {
if (!bucksMode) {
paragraphBuffer.append(ccDefault)
}
else {
paragraphBuffer.append(ccBucks)
val str2 = str.replace(' ', '\u00A0')
}
}
paragraphBuffer.append(str)
oldSpanColour = spanColour
oldCodeMode = codeMode
oldBucksMode = bucksMode
}
}
@@ -688,6 +716,16 @@ object BTeXParser {
handler.codeMode = false
}
@OpenTag // reflective access is impossible with 'private'
fun processElemBUCKS(handler: BTeXHandler, doc: BTeXDocument, uri: String, attribs: HashMap<String, String>) {
handler.bucksMode = true
handler.paragraphBuffer.append("$CURRENCY\u00A0")
}
@CloseTag
fun closeElemBUCKS(handler: BTeXHandler, doc: BTeXDocument, uri: String, siblingIndex: Int) {
handler.bucksMode = false
}
@OpenTag // reflective access is impossible with 'private'
fun processElemCOVER(handler: BTeXHandler, doc: BTeXDocument, uri: String, attribs: HashMap<String, String>) {
@@ -799,6 +837,14 @@ object BTeXParser {
}
}
@OpenTag // reflective access is impossible with 'private'
fun processElemVAR(handler: BTeXHandler, doc: BTeXDocument, uri: String, attribs: HashMap<String, String>) {
attribs["id"]?.let {
val value = varMap[it] ?: throw NullPointerException("No variable definition of '$it'")
handler.paragraphBuffer.append(value)
}
}
@@ -1351,6 +1397,7 @@ object BTeXParser {
companion object {
val ccDefault = TerrarumSansBitmap.toColorCode(0,0,0)
val ccBucks = TerrarumSansBitmap.toColorCode(4,0,0)
private const val ZWSP = 0x200B
private const val SHY = 0xAD

View File

@@ -172,72 +172,144 @@ class ItemCharcoal(originalID: ItemID) : OreItemBase(originalID) {
class IngotCopper(originalID: ItemID) : OreItemBase(originalID) {
override var originalName = "ITEM_INGOT_COPPER"
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(1,5)
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(16,0)
}
class IngotIron(originalID: ItemID) : OreItemBase(originalID) {
override var originalName = "ITEM_INGOT_IRON"
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(2,5)
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(16,0)
}
class IngotSteel(originalID: ItemID) : OreItemBase(originalID) {
override var originalName = "ITEM_INGOT_STEEL"
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(3,5)
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(18,0)
}
class IngotZinc(originalID: ItemID) : OreItemBase(originalID) {
override var originalName = "ITEM_INGOT_ZINC"
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(4,5)
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(19,0)
}
class IngotTin(originalID: ItemID) : OreItemBase(originalID) {
override var originalName = "ITEM_INGOT_TIN"
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(5,5)
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(20,0)
}
class IngotGold(originalID: ItemID) : OreItemBase(originalID) {
override var originalName = "ITEM_INGOT_GOLD"
override val materialId: String = "AURM"
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(6, 5)
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(21, 0)
}
class IngotSilver(originalID: ItemID) : OreItemBase(originalID) {
override var originalName = "ITEM_INGOT_SILVER"
override val materialId: String = "ARGN"
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(7,5)
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(22,0)
}
class IngotLead(originalID: ItemID) : OreItemBase(originalID) {
override var originalName = "ITEM_INGOT_LEAD"
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(8,5)
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(23,0)
}
class IngotBronze(originalID: ItemID) : OreItemBase(originalID) {
override var originalName = "ITEM_INGOT_BRONZE"
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(9,5)
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(24,0)
}
class IngotBrass(originalID: ItemID) : OreItemBase(originalID) {
override var originalName = "ITEM_INGOT_BRASS"
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(10,5)
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(25,0)
}
class IngotElectrum(originalID: ItemID) : OreItemBase(originalID) {
override var originalName = "ITEM_INGOT_ELECTRUM"
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(11,5)
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(26,0)
}
class IngotSilverBillon(originalID: ItemID) : OreItemBase(originalID) {
override var originalName = "ITEM_INGOT_SILVER_BILLON"
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(12,5)
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(27,0)
}
class IngotRosegold(originalID: ItemID) : OreItemBase(originalID) {
override var originalName = "ITEM_INGOT_ROSEGOLD"
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(13,5)
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(28,0)
}
class IngotSolder(originalID: ItemID) : OreItemBase(originalID) {
override var originalName = "ITEM_INGOT_SOLDER"
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(14,5)
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(29,0)
}
class SheetCopper(originalID: ItemID) : OreItemBase(originalID) {
override var originalName = "ITEM_SHEET_COPPER"
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(16,1)
}
class SheetIron(originalID: ItemID) : OreItemBase(originalID) {
override var originalName = "ITEM_SHEET_IRON"
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(16,1)
}
class SheetSteel(originalID: ItemID) : OreItemBase(originalID) {
override var originalName = "ITEM_SHEET_STEEL"
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(18,1)
}
class SheetZinc(originalID: ItemID) : OreItemBase(originalID) {
override var originalName = "ITEM_SHEET_ZINC"
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(19,1)
}
class SheetTin(originalID: ItemID) : OreItemBase(originalID) {
override var originalName = "ITEM_SHEET_TIN"
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(20,1)
}
class SheetGold(originalID: ItemID) : OreItemBase(originalID) {
override var originalName = "ITEM_SHEET_GOLD"
override val materialId: String = "AURM"
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(21,1)
}
class SheetSilver(originalID: ItemID) : OreItemBase(originalID) {
override var originalName = "ITEM_SHEET_SILVER"
override val materialId: String = "ARGN"
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(22,1)
}
class SheetLead(originalID: ItemID) : OreItemBase(originalID) {
override var originalName = "ITEM_SHEET_LEAD"
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(23,1)
}
class SheetBronze(originalID: ItemID) : OreItemBase(originalID) {
override var originalName = "ITEM_SHEET_BRONZE"
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(24,1)
}
class SheetBrass(originalID: ItemID) : OreItemBase(originalID) {
override var originalName = "ITEM_SHEET_BRASS"
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(25,1)
}
class SheetElectrum(originalID: ItemID) : OreItemBase(originalID) {
override var originalName = "ITEM_SHEET_ELECTRUM"
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(26,1)
}
class SheetSilverBillon(originalID: ItemID) : OreItemBase(originalID) {
override var originalName = "ITEM_SHEET_SILVER_BILLON"
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(27,1)
}
class SheetRosegold(originalID: ItemID) : OreItemBase(originalID) {
override var originalName = "ITEM_SHEET_ROSEGOLD"
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(28,1)
}
class SheetSolder(originalID: ItemID) : OreItemBase(originalID) {
override var originalName = "ITEM_SHEET_SOLDER"
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(29,1)
}

View File

@@ -40,6 +40,11 @@ class BTeXTest : ApplicationAdapter() {
private lateinit var bg: TextureRegion
private val varMap = hashMapOf(
"terrarumver" to "Alpha 1.3",
"bucks" to "121687"
)
override fun create() {
batch = FlippingSpriteBatch(1000)
camera = OrthographicCamera(1280f, 720f)
@@ -53,7 +58,7 @@ class BTeXTest : ApplicationAdapter() {
if (!isBookFinalised) {
measureTimeMillis {
val f = BTeXParser.invoke(Gdx.files.internal("./assets/mods/basegame/books/$filePath"))
val f = BTeXParser.invoke(Gdx.files.internal("./assets/mods/basegame/books/$filePath"), varMap)
document = f.first
documentHandler = f.second
}.also {