@@ -16,6 +16,7 @@ import "C"
1616import (
1717 "context"
1818 "fmt"
19+ "log"
1920 "unsafe"
2021)
2122
@@ -370,6 +371,32 @@ func (handle *VarnamHandle) TransliterateAdvanced(ctx context.Context, word stri
370371 }
371372}
372373
374+ // TransliterateGreedyTokenized transliterate but only tokenizer output
375+ func (handle * VarnamHandle ) TransliterateGreedyTokenized (word string ) []Suggestion {
376+ var result []Suggestion
377+
378+ var resultPointer * C.varray
379+
380+ cWord := C .CString (word )
381+ defer C .free (unsafe .Pointer (cWord ))
382+
383+ code := C .varnam_transliterate_greedy_tokenized (handle .connectionID , cWord , & resultPointer )
384+ if code != C .VARNAM_SUCCESS {
385+ log .Print (handle .GetLastError ())
386+ return result
387+ }
388+
389+ i := 0
390+ for i < int (C .varray_length (resultPointer )) {
391+ cSug := (* C .Suggestion )(C .varray_get (resultPointer , C .int (i )))
392+ sug := makeSuggestion (cSug )
393+ result = append (result , sug )
394+ i ++
395+ }
396+
397+ return result
398+ }
399+
373400// ReverseTransliterate reverse transilterate
374401func (handle * VarnamHandle ) ReverseTransliterate (word string ) ([]Suggestion , error ) {
375402 var sugs []Suggestion
@@ -513,6 +540,42 @@ func (handle *VarnamHandle) GetRecentlyLearntWords(ctx context.Context, offset i
513540 }
514541}
515542
543+ // GetSuggestions get suggestions for a word
544+ func (handle * VarnamHandle ) GetSuggestions (ctx context.Context , word string ) ([]Suggestion , error ) {
545+ var result []Suggestion
546+
547+ operationID := makeContextOperation ()
548+
549+ select {
550+ case <- ctx .Done ():
551+ C .varnam_cancel (operationID )
552+ return result , nil
553+ default :
554+ var resultPointer * C.varray
555+
556+ cWord := C .CString (word )
557+ defer C .free (unsafe .Pointer (cWord ))
558+
559+ code := C .varnam_get_suggestions (handle .connectionID , operationID , cWord , & resultPointer )
560+ if code != C .VARNAM_SUCCESS {
561+ return result , & VarnamError {
562+ ErrorCode : int (code ),
563+ Message : handle .GetLastError (),
564+ }
565+ }
566+
567+ i := 0
568+ for i < int (C .varray_length (resultPointer )) {
569+ cSug := (* C .Suggestion )(C .varray_get (resultPointer , C .int (i )))
570+ sug := makeSuggestion (cSug )
571+ result = append (result , sug )
572+ i ++
573+ }
574+
575+ return result , nil
576+ }
577+ }
578+
516579func makeGoSchemeDetails (cSD * C.struct_SchemeDetails_t ) SchemeDetails {
517580 isStable := true
518581 if cSD .IsStable == 0 {
0 commit comments