french-wiktionary-flashcards

Easily create Anki flashcards from Wiktionary data.
Log | Files | Refs | README

lookup.go (1076B)


      1 package main
      2 
      3 import (
      4 	"database/sql"
      5 	"errors"
      6 	"fmt"
      7 	"strings"
      8 
      9 	tea "github.com/charmbracelet/bubbletea"
     10 )
     11 
     12 func lookupWord(db *sql.DB, word string) tea.Cmd {
     13 	return func() tea.Msg {
     14 		word = strings.TrimSpace(word) // remove leading / trailing whitespace
     15 		// Replace apostrophes (possible if copy-pasting) with single quotes
     16 		word = strings.ReplaceAll(word, `’`, `'`)
     17 
     18 		rows, err := db.Query(`select definition from words where word = ?`, word)
     19 		if err != nil {
     20 			if errors.Is(err, sql.ErrNoRows) {
     21 				return definitionMsg("")
     22 			}
     23 			return errMsg(fmt.Errorf("looking up '%s': %s", word, err))
     24 		}
     25 		defer rows.Close()
     26 		var combinedDefinition []string
     27 		for rows.Next() {
     28 			var definition string
     29 			err = rows.Scan(&definition)
     30 			if err != nil {
     31 				return errMsg(fmt.Errorf("looking up '%s': %s", word, err))
     32 			}
     33 			combinedDefinition = append(combinedDefinition, definition)
     34 		}
     35 		if err := rows.Err(); err != nil {
     36 			return errMsg(fmt.Errorf("looking up '%s': %s", word, err))
     37 		}
     38 
     39 		return definitionMsg(strings.Join(combinedDefinition, "\n\n"))
     40 	}
     41 }