mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-12 11:34:05 +09:00
btex: v-series korean specific tags
This commit is contained in:
@@ -806,8 +806,7 @@ object BTeXParser {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@OpenTag // reflective access is impossible with 'private'
|
private fun tagVimpl(attribs: HashMap<String, String>): String {
|
||||||
fun processElemV(handler: BTeXHandler, doc: BTeXDocument, uri: String, attribs: HashMap<String, String>) {
|
|
||||||
val hasID = (attribs["id"] != null)
|
val hasID = (attribs["id"] != null)
|
||||||
val hasFROMGAME = (attribs["fromgame"] != null)
|
val hasFROMGAME = (attribs["fromgame"] != null)
|
||||||
|
|
||||||
@@ -817,18 +816,74 @@ object BTeXParser {
|
|||||||
else if (hasID) {
|
else if (hasID) {
|
||||||
val it = attribs["id"]!!
|
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'")
|
||||||
paragraphBuffer.append(value)
|
return value
|
||||||
}
|
}
|
||||||
else if (hasFROMGAME) {
|
else if (hasFROMGAME) {
|
||||||
val it = attribs["fromgame"]!!
|
val it = attribs["fromgame"]!!
|
||||||
val value = Lang.get(it, true)
|
val value = Lang.get(it, true)
|
||||||
paragraphBuffer.append(value)
|
return value
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
throw IllegalStateException("One of following attribute required: id, fromgame")
|
throw IllegalStateException("One of following attribute required: id, fromgame")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@OpenTag // reflective access is impossible with 'private'
|
||||||
|
fun processElemV(handler: BTeXHandler, doc: BTeXDocument, uri: String, attribs: HashMap<String, String>) {
|
||||||
|
paragraphBuffer.append(tagVimpl(attribs))
|
||||||
|
}
|
||||||
|
|
||||||
|
@OpenTag // reflective access is impossible with 'private'
|
||||||
|
fun processElemVEUN(handler: BTeXHandler, doc: BTeXDocument, uri: String, attribs: HashMap<String, String>) {
|
||||||
|
vjosa(tagVimpl(attribs), "는", "은")
|
||||||
|
}
|
||||||
|
@OpenTag // reflective access is impossible with 'private'
|
||||||
|
fun processElemVNEUN(handler: BTeXHandler, doc: BTeXDocument, uri: String, attribs: HashMap<String, String>) {
|
||||||
|
processElemVEUN(handler, doc, uri, attribs)
|
||||||
|
}
|
||||||
|
|
||||||
|
@OpenTag // reflective access is impossible with 'private'
|
||||||
|
fun processElemVI(handler: BTeXHandler, doc: BTeXDocument, uri: String, attribs: HashMap<String, String>) {
|
||||||
|
vjosa(tagVimpl(attribs), "가", "이")
|
||||||
|
}
|
||||||
|
@OpenTag // reflective access is impossible with 'private'
|
||||||
|
fun processElemVGA(handler: BTeXHandler, doc: BTeXDocument, uri: String, attribs: HashMap<String, String>) {
|
||||||
|
processElemVI(handler, doc, uri, attribs)
|
||||||
|
}
|
||||||
|
|
||||||
|
@OpenTag // reflective access is impossible with 'private'
|
||||||
|
fun processElemVEUL(handler: BTeXHandler, doc: BTeXDocument, uri: String, attribs: HashMap<String, String>) {
|
||||||
|
vjosa(tagVimpl(attribs), "를", "을")
|
||||||
|
}
|
||||||
|
@OpenTag // reflective access is impossible with 'private'
|
||||||
|
fun processElemVREUL(handler: BTeXHandler, doc: BTeXDocument, uri: String, attribs: HashMap<String, String>) {
|
||||||
|
processElemVEUL(handler, doc, uri, attribs)
|
||||||
|
}
|
||||||
|
|
||||||
|
@OpenTag // reflective access is impossible with 'private'
|
||||||
|
fun processElemVWA(handler: BTeXHandler, doc: BTeXDocument, uri: String, attribs: HashMap<String, String>) {
|
||||||
|
vjosa(tagVimpl(attribs), "와", "과")
|
||||||
|
}
|
||||||
|
@OpenTag // reflective access is impossible with 'private'
|
||||||
|
fun processElemVGWA(handler: BTeXHandler, doc: BTeXDocument, uri: String, attribs: HashMap<String, String>) {
|
||||||
|
processElemVWA(handler, doc, uri, attribs)
|
||||||
|
}
|
||||||
|
|
||||||
|
@OpenTag // reflective access is impossible with 'private'
|
||||||
|
fun processElemVRO(handler: BTeXHandler, doc: BTeXDocument, uri: String, attribs: HashMap<String, String>) {
|
||||||
|
vjosa(tagVimpl(attribs), "로", "으로")
|
||||||
|
}
|
||||||
|
@OpenTag // reflective access is impossible with 'private'
|
||||||
|
fun processElemVEURO(handler: BTeXHandler, doc: BTeXDocument, uri: String, attribs: HashMap<String, String>) {
|
||||||
|
processElemVRO(handler, doc, uri, attribs)
|
||||||
|
}
|
||||||
|
|
||||||
|
@OpenTag // reflective access is impossible with 'private'
|
||||||
|
private fun vjosa(str: String, josa1: String, josa2: String) {
|
||||||
|
val value = Lang.getHangulJosa(str, josa1, josa2)
|
||||||
|
paragraphBuffer.append(value)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -311,36 +311,29 @@ object Lang {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun postEunNeun(word: String): String {
|
fun getHangulJosa(word: String, josa1: String, josa2: String): String {
|
||||||
val lastChar = getLastChar(word)
|
val lastChar = getLastChar(word)
|
||||||
|
val isIrregular = josa1.startsWith("로") && josa2.startsWith("으로")
|
||||||
|
|
||||||
if (isHangul(lastChar)) {
|
val selected = if (isHangul(lastChar)) {
|
||||||
val index = lastChar.toInt() - HANGUL_SYL_START
|
val index = lastChar.toInt() - HANGUL_SYL_START
|
||||||
return if (index % 28 == 0) word + "는" else word + "은"
|
if (isIrregular)
|
||||||
|
if (index % 28 == 0 || index % 28 == 8) josa1 else josa2
|
||||||
|
else
|
||||||
|
if (index % 28 == 0) josa1 else josa2
|
||||||
}
|
}
|
||||||
else if (lastChar in 'A'..'Z' || lastChar in 'a'..'z') {
|
else if (lastChar in 'A'..'Z' || lastChar in 'a'..'z') {
|
||||||
val index = (lastChar.toInt() - 0x41) % 0x20
|
val index = (lastChar.toInt() - 0x41) % 0x20
|
||||||
return if (HANGUL_POST_INDEX_ALPH[index] == 0) word + "는" else word + "은"
|
if (isIrregular)
|
||||||
|
if (HANGUL_POST_RO_INDEX_ALPH[index] == 0) josa1 else josa2
|
||||||
|
else
|
||||||
|
if (HANGUL_POST_INDEX_ALPH[index] == 0) josa1 else josa2
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return "은"
|
josa2
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
fun postIiGa(word: String): String {
|
return "$word$selected"
|
||||||
val lastChar = getLastChar(word)
|
|
||||||
|
|
||||||
if (isHangul(lastChar)) {
|
|
||||||
val index = lastChar.toInt() - HANGUL_SYL_START
|
|
||||||
return if (index % 28 == 0) word + "가" else word + "이"
|
|
||||||
}
|
|
||||||
else if (lastChar in 'A'..'Z' || lastChar in 'a'..'z') {
|
|
||||||
val index = (lastChar.toInt() - 0x41) % 0x20
|
|
||||||
return if (HANGUL_POST_INDEX_ALPH[index] == 0) word + "가" else word + "이"
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return "이"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun isHangul(c: Char): Boolean {
|
private fun isHangul(c: Char): Boolean {
|
||||||
|
|||||||
@@ -24,8 +24,8 @@ import kotlin.system.measureTimeMillis
|
|||||||
*/
|
*/
|
||||||
class BTeXTest : ApplicationAdapter() {
|
class BTeXTest : ApplicationAdapter() {
|
||||||
|
|
||||||
val filePath = "btex.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"
|
||||||
// val filePath = "literature/koKR/yisang_nalgae.xml"
|
// val filePath = "literature/koKR/yisang_nalgae.xml"
|
||||||
|
|||||||
Reference in New Issue
Block a user