package transdb import ( "git.mleku.dev/iskra" "git.smesh.lol/iskradb/lattice" ) // LangDesc and word order / marker / role constants — re-exported from iskra. type LangDesc = iskra.LangDesc const ( OrderSVO = iskra.OrderSVO OrderSOV = iskra.OrderSOV OrderVSO = iskra.OrderVSO OrderVOS = iskra.OrderVOS OrderOVS = iskra.OrderOVS OrderOSV = iskra.OrderOSV MarkerPrepositional = iskra.MarkerPrepositional MarkerPostpositional = iskra.MarkerPostpositional MarkerCase = iskra.MarkerCase RoleNone = iskra.RoleNone RoleNPSubjTopic = iskra.RoleNPSubjTopic RoleNPSubjGram = iskra.RoleNPSubjGram RoleNPObjDirect = iskra.RoleNPObjDirect RolePPSource = iskra.RolePPSource RolePPLimit = iskra.RolePPLimit RolePPComitative = iskra.RolePPComitative RolePPLocative = iskra.RolePPLocative RolePPTemporal = iskra.RolePPTemporal RoleNPDative = iskra.RoleNPDative RolePPLocStatic = iskra.RolePPLocStatic RolePPInstrumental = iskra.RolePPInstrumental CoordVerbClass = iskra.CoordVerbClass ) // Registration functions delegated to iskra. func RegisterLangDesc(tree *lattice.Tree, pool *[]byte, lang uint8, desc LangDesc) { iskra.RegisterLangDesc(tree, pool, lang, desc) } func GetLangDesc(tree *lattice.Tree, lang uint8) (LangDesc, bool) { return iskra.GetLangDesc(tree, lang) } func RegisterParticleRole(tree *lattice.Tree, pool *[]byte, lang uint8, semCoord uint64, particle string, role uint8) { iskra.RegisterParticleRole(tree, pool, lang, semCoord, particle, role) } func LookupParticleRole(tree *lattice.Tree, lang uint8, particle string, npFlags uint64) uint8 { return iskra.LookupParticleRole(tree, lang, particle, npFlags) } // LookupTargetMarker returns the surface marker for a role in the target language. // Calls the registered iskra.MarkerFunc; falls back to the hardcoded table below. func LookupTargetMarker(dstLang uint8, role uint8) string { if s := iskra.LookupTargetMarker(dstLang, role); s != "" { return s } // Hardcoded fallback tables for EN and JA before RegisterMarkerFunc is called. if dstLang == LangEN { switch role { case RolePPLocative, RolePPLocStatic: return "in" case RoleNPDative: return "to" case RolePPSource: return "from" case RolePPComitative: return "with" case RolePPLimit: return "until" case RolePPTemporal: return "at" } } if dstLang == LangJA { switch role { case RoleNPSubjTopic: return "は" case RoleNPSubjGram: return "が" case RoleNPObjDirect: return "を" case RolePPSource: return "から" case RolePPLimit: return "まで" case RolePPComitative: return "と" case RolePPLocative, RoleNPDative, RolePPTemporal: return "に" case RolePPLocStatic, RolePPInstrumental: return "で" } } return "" }