all repos

anpi @ 8769209

yaml to anki importer
3 files changed, 25 insertions(+), 6 deletions(-)
add markdown support
Author: Oleksandr Smirnov olexsmir@gmail.com
Committed at: 2025-04-30 00:12:16 +0300
Parent: 496483f
M go.mod
···
        2
        2
         

      
        3
        3
         go 1.24.2

      
        4
        4
         

      
        5
        
        -require gopkg.in/yaml.v3 v3.0.1

      
        
        5
        +require (

      
        
        6
        +	github.com/gomarkdown/markdown v0.0.0-20250311123330-531bef5e742b

      
        
        7
        +	gopkg.in/yaml.v3 v3.0.1

      
        
        8
        +)

      
M go.sum
···
        
        1
        +github.com/gomarkdown/markdown v0.0.0-20250311123330-531bef5e742b h1:EY/KpStFl60qA17CptGXhwfZ+k1sFNJIUNR8DdbcuUk=

      
        
        2
        +github.com/gomarkdown/markdown v0.0.0-20250311123330-531bef5e742b/go.mod h1:JDGcbDT52eL4fju3sZ4TeHGsQwhG9nbDV21aMyhwPoA=

      
        1
        3
         gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=

      
        2
        4
         gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=

      
        3
        5
         gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=

      
M main.go
···
        5
        5
         	"log/slog"

      
        6
        6
         	"os"

      
        7
        7
         

      
        
        8
        +	"github.com/gomarkdown/markdown"

      
        
        9
        +	"github.com/gomarkdown/markdown/html"

      
        
        10
        +	mdParser "github.com/gomarkdown/markdown/parser"

      
        
        11
        +

      
        8
        12
         	"github.com/olexsmir/anpi/anki"

      
        9
        13
         	"github.com/olexsmir/anpi/parser"

      
        10
        14
         )

      ···
        30
        34
         	if err != nil {

      
        31
        35
         		return err

      
        32
        36
         	}

      
        33
        
        -

      
        34
        
        -	slog.Info("data", "data", data)

      
        35
        37
         

      
        36
        38
         	for _, deck := range data {

      
        37
        39
         		for _, note := range deck.Notes {

      
        38
        40
         			fields := make(map[string]string)

      
        39
        41
         			for k, v := range note.Fields {

      
        40
        
        -				slog.Info("chicken jokey", "k", k, "v", v, "yep", deck.FieldLookUp(k))

      
        41
        
        -				fields[deck.FieldLookUp(k)] = v

      
        
        42
        +				fields[deck.FieldLookUp(k)] = fromMarkdown(v)

      
        42
        43
         			}

      
        43
        44
         

      
        44
        
        -			slog.Info("got fields", "fields", fields)

      
        
        45
        +			slog.Info("gotten fields", "fields", fields)

      
        45
        46
         

      
        46
        47
         			tags := mergeTags(deck.Tags, note.Tags)

      
        47
        48
         			if _, err := anki.AddNote(deck.Deck, deck.Type, fields, tags); err != nil {

      ···
        70
        71
         

      
        71
        72
         	return result

      
        72
        73
         }

      
        
        74
        +

      
        
        75
        +func fromMarkdown(inp string) string {

      
        
        76
        +	extensions := mdParser.CommonExtensions | mdParser.AutoHeadingIDs | mdParser.NoEmptyLineBeforeBlock

      
        
        77
        +

      
        
        78
        +	htmlFlags := html.CommonFlags | html.HrefTargetBlank

      
        
        79
        +	opts := html.RendererOptions{Flags: htmlFlags}

      
        
        80
        +

      
        
        81
        +	p := mdParser.NewWithExtensions(extensions)

      
        
        82
        +	doc := p.Parse([]byte(inp))

      
        
        83
        +

      
        
        84
        +	renderer := html.NewRenderer(opts)

      
        
        85
        +	return string(markdown.Render(doc, renderer))

      
        
        86
        +}