fix(word generation): hasTab / hasNewline state sometimes being incorrect when using plus n funbox

closes #4698
This commit is contained in:
Miodec 2024-04-28 16:32:33 +02:00
parent 6579f68955
commit a57b6c272f
2 changed files with 27 additions and 18 deletions

View file

@ -450,10 +450,14 @@ export async function init(): Promise<void> {
let generatedWords: string[];
let generatedSectionIndexes: number[];
let wordsHaveTab = false;
let wordsHaveNewline = false;
try {
const gen = await WordsGenerator.generateWords(language);
generatedWords = gen.words;
generatedSectionIndexes = gen.sectionIndexes;
wordsHaveTab = gen.hasTab;
wordsHaveNewline = gen.hasNewline;
} catch (e) {
console.error(e);
if (e instanceof WordsGenerator.WordGenError) {
@ -476,25 +480,17 @@ export async function init(): Promise<void> {
const beforeHasNumbers = TestWords.hasNumbers ? true : false;
let hasTab = false;
let hasNumbers = false;
let hasNewline = false;
for (const word of generatedWords) {
if (/\t/g.test(word) && !hasTab) {
hasTab = true;
}
if (/\d/g.test(word) && !hasNumbers) {
hasNumbers = true;
}
if (/\n/g.test(word) && !hasNewline) {
hasNewline = true;
}
}
TestWords.setHasTab(hasTab);
TestWords.setHasNumbers(hasNumbers);
TestWords.setHasNewline(hasNewline);
TestWords.setHasTab(wordsHaveTab);
TestWords.setHasNewline(wordsHaveNewline);
if (beforeHasNumbers !== hasNumbers) {
void Keymap.refresh();

View file

@ -556,12 +556,16 @@ let currentWordset: Wordset.Wordset | null = null;
let currentLanguage: MonkeyTypes.LanguageObject | null = null;
let isCurrentlyUsingFunboxSection = false;
export async function generateWords(
language: MonkeyTypes.LanguageObject
): Promise<{
type GenerateWordsReturn = {
words: string[];
sectionIndexes: number[];
}> {
hasTab: boolean;
hasNewline: boolean;
};
export async function generateWords(
language: MonkeyTypes.LanguageObject
): Promise<GenerateWordsReturn> {
if (!TestState.isRepeated) {
previousGetNextWordReturns = [];
}
@ -570,12 +574,11 @@ export async function generateWords(
sectionIndex = 0;
sectionHistory = [];
currentLanguage = language;
const ret: {
words: string[];
sectionIndexes: number[];
} = {
const ret: GenerateWordsReturn = {
words: [],
sectionIndexes: [],
hasTab: false,
hasNewline: false,
};
const sectionFunbox = FunboxList.get(Config.funbox).find(
@ -627,6 +630,16 @@ export async function generateWords(
}
i++;
}
ret.hasTab =
ret.words.some((w) => /\t/.test(w)) ||
currentWordset.words.some((w) => /\t/.test(w)) ||
(Config.mode === "quote" && currentQuote.some((w) => /\t/.test(w)));
ret.hasNewline =
ret.words.some((w) => /\n/.test(w)) ||
currentWordset.words.some((w) => /\n/.test(w)) ||
(Config.mode === "quote" && currentQuote.some((w) => /\n/.test(w)));
sectionHistory = []; //free up a bit of memory? is that even a thing?
return ret;
}