commit 07dea0730b6a1e39881e4b0e1c65531dabd03143
parent 78986c0f6c054f0b87de9de12db36ad9e97f1fcb
Author: David Schlachter <t480-debian-git@schlachter.ca>
Date: Fri, 9 Jan 2026 01:41:29 -0500
Unescape all HTML entities in definition previews
Diffstat:
2 files changed, 6 insertions(+), 7 deletions(-)
diff --git a/README.md b/README.md
@@ -87,8 +87,6 @@ Usage of french-wiktionary-flashcards:
- allow setting the language for initial processing, so that we could support
languages other than French
- general code cleanup & organization
-- render HTML entities in definitions -- do some grepping to identify the most
- common ones
- italicise part-of-speech in the TUI (maybe remove numbers from them)
- better gender tags -- jq through the source data to see what's common
- some kind of tests?
diff --git a/ui.go b/ui.go
@@ -4,6 +4,7 @@ import (
"database/sql"
"errors"
"fmt"
+ "html"
"net/http"
"regexp"
"strings"
@@ -178,15 +179,15 @@ func formatDefinitionForDisplay(policy bluemonday.Policy, definition string, max
// Remove all HTML tags
str = policy.Sanitize(str)
+ // Some Wiktionary entries have HTML entities in them. That's okay for Anki,
+ // but it's not okay for displaying the plain text in the console interface.
+ str = html.UnescapeString(str)
// Add some colour to the start of each definition
str = strings.ReplaceAll(str, "\t- ", "\x1b[0;33;49m•\x1b[0m ")
- // Replace common HTML entities
- str = strings.ReplaceAll(str, "'", "’")
- str = strings.ReplaceAll(str, "&", "&")
-
- // Wrap
+ // Limit the width of the displayed definition to 80 characters, or the
+ // width of the viewport (whichever is smaller).
width := min(maxWidth, 80)
return wordwrap.String(str, width)
}