img: in questions and clues supported woo

master
bel 2023-04-04 23:11:36 -06:00
parent 1ba823c13a
commit bf9af0dd64
7 changed files with 28 additions and 18 deletions

2
.gitignore vendored
View File

@ -1,2 +1,4 @@
**/*.bak **/*.bak
**/*.sw* **/*.sw*
/anki
/anki.d

BIN
anki.d

Binary file not shown.

2
go.mod
View File

@ -1,4 +1,4 @@
module gogs.inhome.blapointe.com/anki.d module gogs.inhome.blapointe.com/bel/anki
go 1.19 go 1.19

View File

@ -5,6 +5,7 @@ import (
"image" "image"
"image/jpeg" "image/jpeg"
"image/png" "image/png"
"io"
"os" "os"
"path" "path"
@ -12,7 +13,7 @@ import (
"github.com/nfnt/resize" "github.com/nfnt/resize"
) )
func View(p string) { func View(w io.Writer, p string) {
in, err := os.Open(p) in, err := os.Open(p)
if err != nil { if err != nil {
panic(err) panic(err)
@ -31,10 +32,10 @@ func View(p string) {
if err != nil { if err != nil {
panic(err) panic(err)
} }
printImage(40, src) printImage(w, 40, src)
} }
func printImage(limit int, image image.Image) { func printImage(w io.Writer, limit int, image image.Image) {
if image.Bounds().Max.X > image.Bounds().Max.Y { if image.Bounds().Max.X > image.Bounds().Max.Y {
xmax := image.Bounds().Max.X xmax := image.Bounds().Max.X
ratio := float64(limit) / float64(xmax) ratio := float64(limit) / float64(xmax)
@ -46,14 +47,15 @@ func printImage(limit int, image image.Image) {
height := uint(float64(ymax) * ratio) height := uint(float64(ymax) * ratio)
image = resize.Resize(0, height, image, resize.Bicubic) image = resize.Resize(0, height, image, resize.Bicubic)
} }
escape := "\x1b"
for i := 0; i < image.Bounds().Max.Y; i++ { for i := 0; i < image.Bounds().Max.Y; i++ {
for j := 0; j < image.Bounds().Max.X; j++ { for j := 0; j < image.Bounds().Max.X; j++ {
r, g, b, _ := image.At(j, i).RGBA() r, g, b, _ := image.At(j, i).RGBA()
r = ansi.To256(r) r = ansi.To256(r)
g = ansi.To256(g) g = ansi.To256(g)
b = ansi.To256(b) b = ansi.To256(b)
ansi.Print(r, g, b) fmt.Fprintf(w, "%s[7m%s[38;2;%d;%d;%dm ", escape, escape, r, g, b)
} }
fmt.Printf("\n") fmt.Fprintf(w, "\n")
} }
} }

View File

@ -9,8 +9,8 @@ func TestView(t *testing.T) {
if os.Getenv("INTEGRATION") == "" { if os.Getenv("INTEGRATION") == "" {
t.SkipNow() t.SkipNow()
} }
View("./testdata/tofugu.d/a-hiragana-0.png") View(os.Stderr, "./testdata/tofugu.d/a-hiragana-0.png")
View("./testdata/tofugu.d/a-hiragana-0.sm.png") View(os.Stderr, "./testdata/tofugu.d/a-hiragana-0.sm.png")
View("./testdata/tofugu.d/a-hiragana-1.png") View(os.Stderr, "./testdata/tofugu.d/a-hiragana-1.png")
View("./testdata/tofugu.d/a-hiragana-2.png") View(os.Stderr, "./testdata/tofugu.d/a-hiragana-2.png")
} }

17
main.go
View File

@ -2,6 +2,7 @@ package main
import ( import (
"bufio" "bufio"
"bytes"
"fmt" "fmt"
"log" "log"
"os" "os"
@ -62,11 +63,7 @@ func Main() error {
continue continue
} }
question := db.Question(q) question := db.Question(q)
fmt.Printf("> Q: ") fmt.Printf("> Q: %s\n", question.Q)
if strings.HasPrefix(string(question.Q), "img:") {
} else {
fmt.Printf("%s", question.Q)
}
fmt.Printf("\n") fmt.Printf("\n")
fmt.Printf("> %+v\n", question.Tags) fmt.Printf("> %+v\n", question.Tags)
var response string var response string
@ -130,3 +127,13 @@ func (q Question) Tagged(tag IDT) bool {
} }
return false return false
} }
func (renderable Renderable) String() string {
s := string(renderable)
if !strings.HasPrefix(s, "img:") {
return s
}
buff := bytes.NewBuffer(nil)
View(buff, s[4:])
return string(buff.Bytes())
}

View File

@ -1,10 +1,9 @@
knowledge: knowledge:
questions: questions:
a-hiragana: a-hiragana:
q: img:testdata/tofugu.d/a-hiragana-0.jpg q: img:testdata/tofugu.d/a-hiragana-0.png
clues: clues:
- img:testdata/tofugu.d/a-hiragana-1.jpg - img:testdata/tofugu.d/a-hiragana-1.png
- img:testdata/tofugu.d/a-hiragana-2.jpg
tags: [hiragana, vowel] tags: [hiragana, vowel]
users: users:
breel: breel: