fix: wrong checkbox toggled when preceded by a codeblock checkbox

This commit is contained in:
maishivamhoo123 2025-12-06 20:15:09 +05:30
parent 47a57dd326
commit 9be1fd8585

View file

@ -24,6 +24,39 @@ export function toggleTaskAtLine(markdown: string, lineNumber: number, checked:
return lines.join("\n");
}
export function isInsideCodeBlock(lines :string [] , index : number):boolean{
let inside = false;
for(let i = 0 ; i <= index ; i++){
if(lines[i].startsWith("```")){
inside = !inside;
}
}
return inside;
}
export function toggleTaskAtIndex(markdown: string, taskIndex: number, checked: boolean): string {
const lines = markdown.split("\n");
const taskPattern = /^(\s*[-*+]\s+)\[([ xX])\](\s+.*)$/;
let currentTaskIndex = 0;
for (let i = 0; i < lines.length; i++) {
if (isInsideCodeBlock(lines, i)) continue;
const line = lines[i];
const match = line.match(taskPattern);
if (match) {
if (currentTaskIndex === taskIndex) {
const [, prefix, , suffix] = match;
const newCheckmark = checked ? "x" : " ";
lines[i] = `${prefix}[${newCheckmark}]${suffix}`;
break;
}
currentTaskIndex++;
}
}
return lines.join("\n");
}
export function removeCompletedTasks(markdown: string): string {
const lines = markdown.split("\n");