38 lines
929 B
Go
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
|
|
}
|