Files

38 lines
929 B
Go

// Copyright (c) 2026 Storm Dragon
// SPDX-License-Identifier: GPL-3.0-or-later
package presentation
import (
"strconv"
"unicode"
"git.stormux.org/storm/fenrir/internal/i18n"
)
// Indentation_level counts leading visible whitespace cells. Terminal backends
// normally expand tabs already; a literal tab advances to the next 8-cell stop.
// Blank rows have no meaningful indentation, including terminal padding.
func Indentation_level(line []rune) (int, bool) {
level := 0
for _, char := range line {
if !unicode.IsSpace(char) {
return level, true
}
if char == '\t' {
level += 8 - level%8
} else {
level++
}
}
return 0, false
}
func Indentation_message(level int, mode string) Message {
message := Message{Text: i18n.T("indented ") + strconv.Itoa(level) + " "}
if mode == "beeps" || mode == "both" {
message.Indentation = &Indentation{Level: level, Speech: mode == "both"}
}
return message
}