read from ingame lang

This commit is contained in:
minjaesong
2024-05-08 15:57:39 +09:00
parent 15de0c8352
commit 28d303e1f2
3 changed files with 55 additions and 13 deletions

View File

@@ -16,7 +16,8 @@
<!ENTITY % fontstyle "%fontstyle.basic; | %fontstyle.extra;"> <!ENTITY % fontstyle "%fontstyle.basic; | %fontstyle.extra;">
<!ENTITY % inlinelogo "btex | tex | latex"> <!ENTITY % inlinelogo "btex | tex | latex">
<!ENTITY % textdecor "emph | itemname | targetname"> <!ENTITY % textdecor "emph | itemname | targetname">
<!ENTITY % inline "a | %special; | %fontstyle; | code | bucks | %inlinelogo; | index | var | %textdecor;"> <!ENTITY % vars "v | veun | vneun | vi | vga | veul | vreul | vwa | vgwa | vro | veuro">
<!ENTITY % inline "a | %special; | %fontstyle; | code | bucks | %inlinelogo; | index | %vars; | %textdecor;">
<!ENTITY % inline.meta "a | %special.basic; | %inlinelogo;"> <!ENTITY % inline.meta "a | %special.basic; | %inlinelogo;">
<!ENTITY % Inline "(#PCDATA | %inline;)*"> <!ENTITY % Inline "(#PCDATA | %inline;)*">
<!ENTITY % Inline.meta "(#PCDATA | %inline.meta;)*"> <!ENTITY % Inline.meta "(#PCDATA | %inline.meta;)*">
@@ -38,6 +39,9 @@
start %Number; #IMPLIED"> start %Number; #IMPLIED">
<!ENTITY % id-only "id CDATA #REQUIRED"> <!ENTITY % id-only "id CDATA #REQUIRED">
<!ENTITY % varattr
"id CDATA #IMPLIED
fromgame CDATA #IMPLIED">
<!ENTITY % key-value <!ENTITY % key-value
"key CDATA #REQUIRED "key CDATA #REQUIRED
value CDATA #REQUIRED"> value CDATA #REQUIRED">
@@ -103,8 +107,6 @@
<!ELEMENT btex EMPTY> <!ELEMENT btex EMPTY>
<!ELEMENT latex EMPTY> <!ELEMENT latex EMPTY>
<!ELEMENT tex EMPTY> <!ELEMENT tex EMPTY>
<!ELEMENT var EMPTY>
<!ATTLIST var %id-only;>
<!ELEMENT pair EMPTY> <!ELEMENT pair EMPTY>
<!ATTLIST pair %key-value;> <!ATTLIST pair %key-value;>
<!ELEMENT index EMPTY> <!ELEMENT index EMPTY>
@@ -149,4 +151,30 @@
<!ELEMENT a %a.content;> <!ELEMENT a %a.content;>
<!ATTLIST a <!ATTLIST a
href CDATA #REQUIRED href CDATA #REQUIRED
> >
<!-- var tags -->
<!ELEMENT v EMPTY>
<!ATTLIST v %varattr;>
<!-- regular josa -->
<!ELEMENT veun EMPTY>
<!ATTLIST veun %varattr;>
<!ELEMENT vneun EMPTY>
<!ATTLIST vneun %varattr;>
<!ELEMENT vi EMPTY>
<!ATTLIST vi %varattr;>
<!ELEMENT vga EMPTY>
<!ATTLIST vga %varattr;>
<!ELEMENT veul EMPTY>
<!ATTLIST veul %varattr;>
<!ELEMENT vreul EMPTY>
<!ATTLIST vreul %varattr;>
<!ELEMENT vwa EMPTY>
<!ATTLIST vwa %varattr;>
<!ELEMENT vgwa EMPTY>
<!ATTLIST vgwa %varattr;>
<!-- irregular josa -->
<!ELEMENT vro EMPTY>
<!ATTLIST vro %varattr;>
<!ELEMENT veuro EMPTY>
<!ATTLIST veuro %varattr;>

View File

@@ -14,7 +14,7 @@ import net.torvald.terrarum.btex.BTeXDrawCall
import net.torvald.terrarum.btex.TypesetDrawCall import net.torvald.terrarum.btex.TypesetDrawCall
import net.torvald.terrarum.ceilToFloat import net.torvald.terrarum.ceilToFloat
import net.torvald.terrarum.gameitems.ItemID import net.torvald.terrarum.gameitems.ItemID
import net.torvald.terrarum.modulebasegame.console.GetAV.isNum import net.torvald.terrarum.langpack.Lang
import net.torvald.terrarum.toHex import net.torvald.terrarum.toHex
import net.torvald.terrarum.tryDispose import net.torvald.terrarum.tryDispose
import net.torvald.terrarum.ui.Toolkit import net.torvald.terrarum.ui.Toolkit
@@ -31,7 +31,6 @@ import org.xml.sax.helpers.DefaultHandler
import java.io.File import java.io.File
import java.io.FileInputStream import java.io.FileInputStream
import java.io.StringReader import java.io.StringReader
import java.util.regex.Pattern
import javax.xml.parsers.SAXParserFactory import javax.xml.parsers.SAXParserFactory
import kotlin.math.roundToInt import kotlin.math.roundToInt
import kotlin.reflect.KFunction import kotlin.reflect.KFunction
@@ -909,11 +908,26 @@ object BTeXParser {
} }
@OpenTag // reflective access is impossible with 'private' @OpenTag // reflective access is impossible with 'private'
fun processElemVAR(handler: BTeXHandler, doc: BTeXDocument, uri: String, attribs: HashMap<String, String>) { fun processElemV(handler: BTeXHandler, doc: BTeXDocument, uri: String, attribs: HashMap<String, String>) {
attribs["id"]?.let { val hasID = (attribs["id"] != null)
val hasFROMGAME = (attribs["fromgame"] != null)
if (hasID && hasFROMGAME) {
throw IllegalStateException("Use only one of following attributes: id, fromgame")
}
else if (hasID) {
val it = attribs["id"]!!
val value = varMap[it] ?: throw NullPointerException("No variable definition of '$it'") val value = varMap[it] ?: throw NullPointerException("No variable definition of '$it'")
handler.paragraphBuffer.append(value) handler.paragraphBuffer.append(value)
} }
else if (hasFROMGAME) {
val it = attribs["fromgame"]!!
val value = Lang.get(it, true)
handler.paragraphBuffer.append(value)
}
else {
throw IllegalStateException("One of following attribute required: id, fromgame")
}
} }

View File

@@ -11,11 +11,9 @@ import com.badlogic.gdx.graphics.Texture
import com.badlogic.gdx.graphics.g2d.TextureRegion import com.badlogic.gdx.graphics.g2d.TextureRegion
import com.badlogic.gdx.graphics.glutils.ShaderProgram import com.badlogic.gdx.graphics.glutils.ShaderProgram
import net.torvald.btex.BTeXParser import net.torvald.btex.BTeXParser
import net.torvald.terrarum.FlippingSpriteBatch import net.torvald.terrarum.*
import net.torvald.terrarum.btex.BTeXDocument import net.torvald.terrarum.btex.BTeXDocument
import net.torvald.terrarum.ceilToInt import net.torvald.terrarum.langpack.Lang
import net.torvald.terrarum.gdxClearAndEnableBlend
import net.torvald.terrarum.inUse
import net.torvald.unicode.EMDASH import net.torvald.unicode.EMDASH
import java.io.File import java.io.File
import kotlin.system.measureTimeMillis import kotlin.system.measureTimeMillis
@@ -26,7 +24,7 @@ import kotlin.system.measureTimeMillis
*/ */
class BTeXTest : ApplicationAdapter() { class BTeXTest : ApplicationAdapter() {
val filePath = "btex_ko.xml" val filePath = "btex.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"
@@ -46,6 +44,8 @@ class BTeXTest : ApplicationAdapter() {
) )
override fun create() { override fun create() {
Lang.invoke()
batch = FlippingSpriteBatch(1000) batch = FlippingSpriteBatch(1000)
camera = OrthographicCamera(1280f, 720f) camera = OrthographicCamera(1280f, 720f)
camera.setToOrtho(true) // some elements are pre-flipped, while some are not. The statement itself is absolutely necessary to make edge of the screen as the origin camera.setToOrtho(true) // some elements are pre-flipped, while some are not. The statement itself is absolutely necessary to make edge of the screen as the origin