Cthulhu is no longer a fork. Now it is a screen reader written in Golang.
This commit is contained in:
1 parent
a998fe67de
commit
069fc674dc
708 files changed
+112482
-532
No files matched your search
@@ -0,0 +1,140 @@
|
||||
// Cthulhu screen reader.
|
||||
// Copyright (c) 2026 Storm Dragon
|
||||
// Authors: Storm Dragon, Angus Kola
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify it
|
||||
// under the terms of the GNU General Public License as published by the Free
|
||||
// Software Foundation, either version 3 of the License, or (at your option)
|
||||
// any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
// more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License along with
|
||||
// this program. If not, see <https://www.gnu.org/licenses/gpl-3.0.html>.
|
||||
|
||||
package config
|
||||
|
||||
import (
|
||||
"strings"
|
||||
)
|
||||
|
||||
type rawReadingSettings struct {
|
||||
EnablePauseBreaks *bool `toml:"enablePauseBreaks"`
|
||||
SpeakNumbersAsDigits *bool `toml:"speakNumbersAsDigits"`
|
||||
SpeakMultiCaseStringsAsWords *bool `toml:"speakMultiCaseStringsAsWords"`
|
||||
EnableIndentation *bool `toml:"enableIndentation"`
|
||||
OnlySpeakDisplayedText *bool `toml:"onlySpeakDisplayedText"`
|
||||
SpeakBlankLines *bool `toml:"speakBlankLines"`
|
||||
EnableMnemonicSpeaking *bool `toml:"enableMnemonicSpeaking"`
|
||||
EnablePositionSpeaking *bool `toml:"enablePositionSpeaking"`
|
||||
EnableTutorialMessages *bool `toml:"enableTutorialMessages"`
|
||||
MessagesAreDetailed *bool `toml:"messagesAreDetailed"`
|
||||
UseColorNames *bool `toml:"useColorNames"`
|
||||
PresentTooltips *bool `toml:"presentToolTips"`
|
||||
EnableMouseReview *bool `toml:"enableMouseReview"`
|
||||
SpeakMisspelledIndicator *bool `toml:"speakMisspelledIndicator"`
|
||||
SpeakContextBlockquote *bool `toml:"speakContextBlockquote"`
|
||||
SpeakContextList *bool `toml:"speakContextList"`
|
||||
SpeakContextTable *bool `toml:"speakContextTable"`
|
||||
SpeakContextPanel *bool `toml:"speakContextPanel"`
|
||||
SpeakContextLandmark *bool `toml:"speakContextLandmark"`
|
||||
SpeakContextNonLandmarkForm *bool `toml:"speakContextNonLandmarkForm"`
|
||||
SayAllContextBlockquote *bool `toml:"sayAllContextBlockquote"`
|
||||
SayAllContextList *bool `toml:"sayAllContextList"`
|
||||
SayAllContextTable *bool `toml:"sayAllContextTable"`
|
||||
SayAllContextPanel *bool `toml:"sayAllContextPanel"`
|
||||
SayAllContextLandmark *bool `toml:"sayAllContextLandmark"`
|
||||
SayAllContextNonLandmarkForm *bool `toml:"sayAllContextNonLandmarkForm"`
|
||||
ReadFullRowInGUITable *bool `toml:"readFullRowInGUITable"`
|
||||
ReadFullRowInDocumentTable *bool `toml:"readFullRowInDocumentTable"`
|
||||
ReadFullRowInSpreadSheet *bool `toml:"readFullRowInSpreadSheet"`
|
||||
}
|
||||
|
||||
type rawSettings struct {
|
||||
TimeFormat *string `toml:"time-format"`
|
||||
DateFormat *string `toml:"date-format"`
|
||||
UseCustomEchoVoice *bool `toml:"useCustomEchoVoice"`
|
||||
UseCustomEchoSpeechServer *bool `toml:"useCustomEchoSpeechServer"`
|
||||
UseCustomEchoForKey *bool `toml:"useCustomEchoForKey"`
|
||||
UseCustomEchoForCharacter *bool `toml:"useCustomEchoForCharacter"`
|
||||
UseCustomEchoForWord *bool `toml:"useCustomEchoForWord"`
|
||||
UseCustomEchoForSentence *bool `toml:"useCustomEchoForSentence"`
|
||||
EchoVoice *Voice `toml:"echoVoice"`
|
||||
EchoSpeechServerInfo []string `toml:"echoSpeechServerInfo"`
|
||||
|
||||
EnableSound *bool `toml:"enableSound"`
|
||||
SoundVolume *float64 `toml:"soundVolume"`
|
||||
SoundSink *string `toml:"soundSink"`
|
||||
SoundTheme *string `toml:"soundTheme"`
|
||||
PlaySoundForRole *bool `toml:"playSoundForRole"`
|
||||
PlaySoundForState *bool `toml:"playSoundForState"`
|
||||
PlaySoundForPositionInSet *bool `toml:"playSoundForPositionInSet"`
|
||||
PlaySoundForValue *bool `toml:"playSoundForValue"`
|
||||
SpatializeObjectSounds *bool `toml:"spatializeObjectSounds"`
|
||||
BeepProgressBarUpdates *bool `toml:"beepProgressBarUpdates"`
|
||||
ProgressBarBeepInterval *int `toml:"progressBarBeepInterval"`
|
||||
RoleSoundPresentation *string `toml:"roleSoundPresentation"`
|
||||
|
||||
StartingProfile []string `toml:"startingProfile"`
|
||||
ActiveProfile []string `toml:"activeProfile"`
|
||||
EnableSpeech *bool `toml:"enableSpeech"`
|
||||
EnableBraille *bool `toml:"enableBraille"`
|
||||
EnableContractedBraille *bool `toml:"enableContractedBraille"`
|
||||
BrailleContractionTable *string `toml:"brailleContractionTable"`
|
||||
BrailleRolenameStyle *int `toml:"brailleRolenameStyle"`
|
||||
BrailleDisableEOL *bool `toml:"disableBrailleEOL"`
|
||||
BrailleWordWrap *bool `toml:"enableBrailleWordWrap"`
|
||||
BrailleVerbosity *int `toml:"brailleVerbosityLevel"`
|
||||
BrailleSelectionIndicator *int `toml:"brailleSelectorIndicator"`
|
||||
BrailleLinkIndicator *int `toml:"brailleLinkIndicator"`
|
||||
BrailleFlashMessages *bool `toml:"enableFlashMessages"`
|
||||
BrailleFlashTime *int `toml:"brailleFlashTime"`
|
||||
BrailleFlashPersistent *bool `toml:"flashIsPersistent"`
|
||||
BrailleFlashDetailed *bool `toml:"flashIsDetailed"`
|
||||
SpeechServerInfo []string `toml:"speechServerInfo"`
|
||||
HardwareSpeechDevice *string `toml:"hardwareSpeechDevice"`
|
||||
HardwareSpeechBaudRate *int `toml:"hardwareSpeechBaudRate"`
|
||||
SpeechServerFactory *string `toml:"speechServerFactory"`
|
||||
SpeakDescription *bool `toml:"speakDescription"`
|
||||
SpeechVerbosityLevel *int `toml:"speechVerbosityLevel"`
|
||||
SayAllStyle *int `toml:"sayAllStyle"`
|
||||
Reading rawReadingSettings `toml:"reading"`
|
||||
VerbalizePunctuationStyle *int `toml:"verbalizePunctuationStyle"`
|
||||
CapitalizationStyle *string `toml:"capitalizationStyle"`
|
||||
KeyboardLayout *int `toml:"keyboardLayout"`
|
||||
CthulhuModifierKeys *[]string `toml:"cthulhuModifierKeys"`
|
||||
EnableKeyEcho *bool `toml:"enableKeyEcho"`
|
||||
EnableEchoByCharacter *bool `toml:"enableEchoByCharacter"`
|
||||
EnableEchoByWord *bool `toml:"enableEchoByWord"`
|
||||
EnableEchoBySentence *bool `toml:"enableEchoBySentence"`
|
||||
EnableAlphabeticKeys *bool `toml:"enableAlphabeticKeys"`
|
||||
EnableNumericKeys *bool `toml:"enableNumericKeys"`
|
||||
EnablePunctuationKeys *bool `toml:"enablePunctuationKeys"`
|
||||
EnableSpace *bool `toml:"enableSpace"`
|
||||
EnableModifierKeys *bool `toml:"enableModifierKeys"`
|
||||
EnableFunctionKeys *bool `toml:"enableFunctionKeys"`
|
||||
EnableActionKeys *bool `toml:"enableActionKeys"`
|
||||
EnableNavigationKeys *bool `toml:"enableNavigationKeys"`
|
||||
EnableDiacriticalKeys *bool `toml:"enableDiacriticalKeys"`
|
||||
Voices map[string]Voice `toml:"voices"`
|
||||
}
|
||||
|
||||
type document struct {
|
||||
General rawSettings `toml:"general"`
|
||||
Profiles map[string]rawSettings `toml:"profiles"`
|
||||
}
|
||||
|
||||
func selectedProfile(general rawSettings, profiles map[string]rawSettings) string {
|
||||
for _, profile := range [][]string{general.StartingProfile, general.ActiveProfile} {
|
||||
if len(profile) >= 2 && strings.TrimSpace(profile[1]) != "" {
|
||||
return profile[1]
|
||||
}
|
||||
}
|
||||
if _, exists := profiles["default"]; exists {
|
||||
return "default"
|
||||
}
|
||||
return ""
|
||||
}
|
||||
Reference in new issue
Block a user