Files
Odin/tests/core/normal.odin
Karl Zylinski 1f9b4c4555 Add text field to utf8.Grapheme, fix caret translation by grapheme
`decode_grapheme_iterate` already computed the text of each grapheme
cluster, but `decode_grapheme_clusters` discarded it, forcing callers to
reconstruct each cluster's range by looking ahead to the next grapheme's
`byte_index`. Store it on `Grapheme` instead; it is a slice of the input
string, so no allocation is involved.

`core:text/edit` was using `Grapheme.width` -- the number of monospace
cells -- as a byte count when moving the caret by grapheme, so it landed
in the middle of a cluster for anything wider than one byte per cell. Use
`len(Grapheme.text)`, and add a test package for the translations.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 12:27:31 +02:00

60 lines
1.7 KiB
Odin

package tests_core
import rlibc "core:c/libc"
@(init)
download_assets :: proc "contextless" () {
if rlibc.system("python3 " + ODIN_ROOT + "tests/core/download_assets.py " + ODIN_ROOT + "tests/core/assets") != 0 {
panic_contextless("downloading test assets failed!")
}
}
@(require) import "bytes"
@(require) import "c/libc"
@(require) import "compress"
@(require) import "container"
@(require) import "crypto/x509"
@(require) import "encoding/asn1"
@(require) import "encoding/base32"
@(require) import "encoding/base64"
@(require) import "encoding/cbor"
@(require) import "encoding/hex"
@(require) import "encoding/hxa"
@(require) import "encoding/ini"
@(require) import "encoding/json"
@(require) import "encoding/uuid"
@(require) import "encoding/varint"
@(require) import "encoding/xml"
@(require) import "flags"
@(require) import "fmt"
@(require) import "io"
@(require) import "math"
@(require) import "math/big"
@(require) import "math/bits"
@(require) import "math/linalg/glsl"
@(require) import "math/noise"
@(require) import "math/rand"
@(require) import "mem"
@(require) import "nbio"
@(require) import "net"
@(require) import "odin"
@(require) import "os"
@(require) import "os/old"
@(require) import "reflect"
@(require) import "runtime"
@(require) import "slice"
@(require) import "strconv"
@(require) import "strings"
@(require) import "sync"
@(require) import "sync/chan"
@(require) import "sys/posix"
@(require) import "sys/kqueue"
@(require) import "sys/windows"
@(require) import "text/edit"
@(require) import "text/i18n"
@(require) import "text/match"
@(require) import "text/regex"
@(require) import "text/scanner"
@(require) import "thread"
@(require) import "time"
@(require) import "unicode"