diff --git a/src/entities/card.ts b/src/entities/card.ts index 213badf..7ae4b1c 100644 --- a/src/entities/card.ts +++ b/src/entities/card.ts @@ -7,6 +7,7 @@ export abstract class Card { initialContent: string; fields: Record; reversed: boolean; + initialOffset: number; endOffset: number; tags: string[]; inserted: boolean; @@ -22,6 +23,7 @@ export abstract class Card { initialContent: string, fields: Record, reversed: boolean, + initialOffset: number, endOffset: number, tags: string[], inserted: boolean, @@ -33,6 +35,7 @@ export abstract class Card { this.initialContent = initialContent; this.fields = fields; this.reversed = reversed; + this.initialOffset = initialOffset this.endOffset = endOffset; this.tags = tags; this.inserted = inserted; diff --git a/src/entities/clozecard.ts b/src/entities/clozecard.ts index 493c90f..f564f0e 100644 --- a/src/entities/clozecard.ts +++ b/src/entities/clozecard.ts @@ -8,6 +8,7 @@ export class Clozecard extends Card { initialContent: string, fields: Record, reversed: boolean, + initialOffset: number, endOffset: number, tags: string[] = [], inserted = false, @@ -20,6 +21,7 @@ export class Clozecard extends Card { initialContent, fields, reversed, + initialOffset, endOffset, tags, inserted, diff --git a/src/entities/flashcard.ts b/src/entities/flashcard.ts index 650dea6..63b5502 100644 --- a/src/entities/flashcard.ts +++ b/src/entities/flashcard.ts @@ -8,6 +8,7 @@ export class Flashcard extends Card { initialContent: string, fields: Record, reversed: boolean, + initialOffset: number, endOffset: number, tags: string[] = [], inserted = false, @@ -20,6 +21,7 @@ export class Flashcard extends Card { initialContent, fields, reversed, + initialOffset, endOffset, tags, inserted, diff --git a/src/entities/inlinecard.ts b/src/entities/inlinecard.ts index 289caa0..e788279 100644 --- a/src/entities/inlinecard.ts +++ b/src/entities/inlinecard.ts @@ -8,6 +8,7 @@ export class Inlinecard extends Card { initialContent: string, fields: Record, reversed: boolean, + initialOffset: number, endOffset: number, tags: string[] = [], inserted = false, @@ -20,6 +21,7 @@ export class Inlinecard extends Card { initialContent, fields, reversed, + initialOffset, endOffset, tags, inserted, diff --git a/src/entities/spacedcard.ts b/src/entities/spacedcard.ts index d5e84e8..86ff4de 100644 --- a/src/entities/spacedcard.ts +++ b/src/entities/spacedcard.ts @@ -8,6 +8,7 @@ export class Spacedcard extends Card { initialContent: string, fields: Record, reversed: boolean, + initialOffset: number, endOffset: number, tags: string[] = [], inserted = false, @@ -20,6 +21,7 @@ export class Spacedcard extends Card { initialContent, fields, reversed, + initialOffset, endOffset, tags, inserted, diff --git a/src/services/parser.ts b/src/services/parser.ts index a14e095..1c795f9 100644 --- a/src/services/parser.ts +++ b/src/services/parser.ts @@ -42,11 +42,6 @@ export class Parser { headings = [...file.matchAll(this.regex.headingsRegex)]; } - // filter in cacheCodeSections only the objects with type "code" - // the line is 0-indexed - // const codeSections = this.app.metadataCache.getFileCache(this.app.workspace.getActiveFile()).sections.filter(section => section.type === "code") - - note = this.substituteObsidianLinks(`[[${note}]]`, vault); cards = cards.concat( this.generateCardsWithTag(file, headings, deck, vault, note, globalTags) @@ -57,9 +52,24 @@ export class Parser { cards = cards.concat( this.generateSpacedCards(file, headings, deck, vault, note, globalTags) ); - // cards = cards.concat( + // cards = cards.concat( // this.generateClozeCards(file, headings, deck, vault, note, globalTags) // ); + + + // Filter out cards that are fully inside a code block + const codeBlocks = [...file.matchAll(this.regex.obsidianCodeBlock)]; + const rangesToDiscard = codeBlocks.map(x=>([x.index, x.index+x[0].length])) + cards = cards.filter(card => { + const cardRange = [card.initialOffset, card.endOffset]; + const isInRangeToDiscard = rangesToDiscard.some(range => { + return ( + cardRange[0] >= range[0] && cardRange[1] <= range[1] + ); + }); + return !isInRangeToDiscard; + }); + cards.sort((a, b) => a.endOffset - b.endOffset); const defaultAnkiTag = this.settings.defaultAnkiTag; @@ -154,6 +164,7 @@ export class Parser { medias = medias.concat(this.getAudioLinks(prompt)); prompt = this.parseLine(prompt, vault); + const initialOffset = match.index; const endingLine = match.index + match[0].length; const tags: string[] = this.parseTags(match[4], globalTags); const id: number = match[5] ? Number(match[5]) : -1; @@ -170,6 +181,7 @@ export class Parser { originalPrompt, fields, reversed, + initialOffset, endingLine, tags, inserted, @@ -226,6 +238,7 @@ export class Parser { question = this.parseLine(question, vault); answer = this.parseLine(answer, vault); + const initialOffset = match.index const endingLine = match.index + match[0].length; const tags: string[] = this.parseTags(match[5], globalTags); const id: number = match[6] ? Number(match[6]) : -1; @@ -242,6 +255,7 @@ export class Parser { originalQuestion, fields, reversed, + initialOffset, endingLine, tags, inserted, @@ -291,6 +305,7 @@ export class Parser { question = this.parseLine(question, vault); answer = this.parseLine(answer, vault); + const initialOffset = match.index const endingLine = match.index + match[0].length; const tags: string[] = this.parseTags(match[4], globalTags); const id: number = match[6] ? Number(match[6]) : -1; @@ -307,6 +322,7 @@ export class Parser { originalQuestion, fields, reversed, + initialOffset, endingLine, tags, inserted,