Code Monkey home page Code Monkey logo

Comments (8)

zoni avatar zoni commented on May 25, 2024 1

shouldn't each note be processed only once?

The current implementation is somewhat naive in that regard.

This function is responsible for parsing an Obsidian Markdown file:

fn parse_obsidian_note<'a>(path: &Path, context: &Context) -> Result<MarkdownTree<'a>> {

If this encounters the ![[embed]] syntax, it calls embed_file:

obsidian-export/src/lib.rs

Lines 301 to 303 in 7027290

Event::Text(CowStr::Borrowed("![")) => {
let mut elements = embed_file(&text, &context)?;
tree.append(&mut elements);

embed_file, in turns, calls the parse_obsidian_note function from above again if it encounters another Markdown file:

Some("md") => parse_obsidian_note(&path, &context)?,

This is what allows a loop to be created.

However, I'm already passing through a context struct to hold information about the note that is being processed:

#[derive(Debug, Clone)]
/// Context holds parser metadata for the file/note currently being parsed.
struct Context<'a> {
file: PathBuf,
vault_contents: &'a [PathBuf],
frontmatter_strategy: FrontmatterStrategy,
note_depth: u32,
}

Technically, I would be able to keep track of all files that we've processed up to the root note, which would allow implementing the exact behavior you mention (skip a note if it's already been processed). I may play around with that and implement this (possibly as an optional mode) somewhere over the next couple of weeks. Stay tuned 😄

from obsidian-export.

zoni avatar zoni commented on May 25, 2024

Hey there @cristianvasquez!

To make sure I understand correctly:

  1. You have a note Transcluding.md
  2. This note includes itself (it contains ![[Transcluding]])
  3. You run into the Recursion limit exceeded error when trying to export a vault with this note.

Is that correct? If so, this is by design. A note which includes itself would otherwise lead to infinite recursion (which would eventually cause the program to abort with a panic).

I'm not sure off-hand how Obsidian itself handles this (I think it embeds about 7 iframes and then just stops?) but I chose to make this an explicit error to make a note like this very obvious.

Would you prefer to see a different behavior here?

from obsidian-export.

cristianvasquez avatar cristianvasquez commented on May 25, 2024

I don't know what should be expected. But this behavior forced me to change my notes, otherwise, I cannot export.

This happens if there is any 'closed circuit' in notes that expand.

By the way, why it expands the notes?

from obsidian-export.

cristianvasquez avatar cristianvasquez commented on May 25, 2024

Perhaps some sort of .gitignore but for the export would allow ignoring,

Or a fail silently option?

from obsidian-export.

zoni avatar zoni commented on May 25, 2024

This happens if there is any 'closed circuit' in notes that expand.

By this, do you mean note A which transcludes note B, where note B in turn transcludes note A again?

By the way, why it expands the notes?

I'm afraid I don't understand this question, could you elaborate?

Perhaps some sort of .gitignore but for the export would allow ignoring,

This is already supported, see https://github.com/zoni/obsidian-export#ignoring-files 😄

Or a fail silently option?

I think I'd like to understand the use-case slightly better before adding functionality, but I wouldn't be opposed to implementing something like that.

from obsidian-export.

cristianvasquez avatar cristianvasquez commented on May 25, 2024

Oh!... the ignore option was what I looked for :)

Regarding the question, I still don't get why a Recursion limit happened :) shouldn't each note be processed only once?

from obsidian-export.

zoni avatar zoni commented on May 25, 2024

Hey @cristianvasquez, happy new year. 😃

I've just published v0.5.0 which includes a new option, --no-recursive-embeds, to skip processing files more than once within the same note. I believe this will give you the behavior you were looking for.

from obsidian-export.

cristianvasquez avatar cristianvasquez commented on May 25, 2024

happy new year to you @zoni ! Thanks for the new option :)

from obsidian-export.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.