karlicoss / orgparse

Python module for reading Emacs org-mode files
https://orgparse.readthedocs.org
BSD 2-Clause "Simplified" License
376 stars 44 forks source link

Support writing to org files? #11

Open nishadsabnis opened 5 years ago

nishadsabnis commented 5 years ago

Is there any plan to support writing to org files? i.e. creating new org-nodes?

karlicoss commented 5 years ago

Hey, I actually do have a small library, inorganic to write org-mode files and you can see examples in doctests and in orger library. I implemented this in a separate library because want to understand what would be a good API first. So let me know if inorganic works for you and I'd be curious about your usecase, so I could think of a convenient interface!

hrehfeld commented 3 years ago

Is there any reason why there's no documentation on constructing nodes? It seems that roundtrip even with complex files works flawflessly, the only part that is missing is how to construct the ast by hand?

karlicoss commented 3 years ago

@hrehfeld for documentation, do you mean in orgparse, or in the inorganic library I mentioned above? For orgparse, I guess the main issue that the original author of library (and me) didn't have this in mind, so the 'ast' is geared towards single pass document reading. It's also possible to take the document object tree and modify it... but writing back might be a bit more complicated, although doable. I just didn't have many usecases for it so far.

hrehfeld commented 3 years ago

Hm, I see.

@hrehfeld for documentation, do you mean in orgparse, or in the inorganic library I mentioned above? I mainly need full round-trip org-mode parsing, i.e. parse the file, change something, write back the changes. So.. a separation doesn't really make that much sense here other than to keep reading/writing separate.

For orgparse, I guess the main issue that the original author of library (and me) didn't have this in mind, so the 'ast' is geared towards single pass document reading. It's also possible to take the document object tree and modify it... but writing back might be a bit more complicated, although doable. I just didn't have many usecases for it so far.

my usecase is definitely:

root = orgparse.parse('myfile.org')
root.title = 'Look Ma, I changed the Title!'
orgparse.dump(root, 'myfile.org')