langdesc.mx raw
1 package transdb
2
3 import (
4 "git.mleku.dev/iskra"
5 "git.smesh.lol/iskradb/lattice"
6 )
7
8 // LangDesc and word order / marker / role constants — re-exported from iskra.
9 type LangDesc = iskra.LangDesc
10
11 const (
12 OrderSVO = iskra.OrderSVO
13 OrderSOV = iskra.OrderSOV
14 OrderVSO = iskra.OrderVSO
15 OrderVOS = iskra.OrderVOS
16 OrderOVS = iskra.OrderOVS
17 OrderOSV = iskra.OrderOSV
18
19 MarkerPrepositional = iskra.MarkerPrepositional
20 MarkerPostpositional = iskra.MarkerPostpositional
21 MarkerCase = iskra.MarkerCase
22
23 RoleNone = iskra.RoleNone
24 RoleNPSubjTopic = iskra.RoleNPSubjTopic
25 RoleNPSubjGram = iskra.RoleNPSubjGram
26 RoleNPObjDirect = iskra.RoleNPObjDirect
27 RolePPSource = iskra.RolePPSource
28 RolePPLimit = iskra.RolePPLimit
29 RolePPComitative = iskra.RolePPComitative
30 RolePPLocative = iskra.RolePPLocative
31 RolePPTemporal = iskra.RolePPTemporal
32 RoleNPDative = iskra.RoleNPDative
33 RolePPLocStatic = iskra.RolePPLocStatic
34 RolePPInstrumental = iskra.RolePPInstrumental
35
36 CoordVerbClass = iskra.CoordVerbClass
37 )
38
39 // Registration functions delegated to iskra.
40 func RegisterLangDesc(tree *lattice.Tree, pool *[]byte, lang uint8, desc LangDesc) {
41 iskra.RegisterLangDesc(tree, pool, lang, desc)
42 }
43
44 func GetLangDesc(tree *lattice.Tree, lang uint8) (LangDesc, bool) {
45 return iskra.GetLangDesc(tree, lang)
46 }
47
48 func RegisterParticleRole(tree *lattice.Tree, pool *[]byte, lang uint8, semCoord uint64, particle string, role uint8) {
49 iskra.RegisterParticleRole(tree, pool, lang, semCoord, particle, role)
50 }
51
52 func LookupParticleRole(tree *lattice.Tree, lang uint8, particle string, npFlags uint64) uint8 {
53 return iskra.LookupParticleRole(tree, lang, particle, npFlags)
54 }
55
56 // LookupTargetMarker returns the surface marker for a role in the target language.
57 // Calls the registered iskra.MarkerFunc; falls back to the hardcoded table below.
58 func LookupTargetMarker(dstLang uint8, role uint8) string {
59 if s := iskra.LookupTargetMarker(dstLang, role); s != "" {
60 return s
61 }
62 // Hardcoded fallback tables for EN and JA before RegisterMarkerFunc is called.
63 if dstLang == LangEN {
64 switch role {
65 case RolePPLocative, RolePPLocStatic:
66 return "in"
67 case RoleNPDative:
68 return "to"
69 case RolePPSource:
70 return "from"
71 case RolePPComitative:
72 return "with"
73 case RolePPLimit:
74 return "until"
75 case RolePPTemporal:
76 return "at"
77 }
78 }
79 if dstLang == LangJA {
80 switch role {
81 case RoleNPSubjTopic:
82 return "は"
83 case RoleNPSubjGram:
84 return "が"
85 case RoleNPObjDirect:
86 return "を"
87 case RolePPSource:
88 return "から"
89 case RolePPLimit:
90 return "まで"
91 case RolePPComitative:
92 return "と"
93 case RolePPLocative, RoleNPDative, RolePPTemporal:
94 return "に"
95 case RolePPLocStatic, RolePPInstrumental:
96 return "で"
97 }
98 }
99 return ""
100 }
101