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