rasendubi / uniorg

An accurate Org-mode parser for JavaScript/TypeScript
https://oleksii.shmalko.com/uniorg
GNU General Public License v3.0
256 stars 24 forks source link

Providing #+NAME and #+CAPTION for images #87

Open ispringle opened 1 year ago

ispringle commented 1 year ago

Orgmode has a few keywords you can specify for an image and they are #+NAME, #+CAPTION, and #+ATTR_. Using Uniorg the attr values come through when I specify ATTR_HTML (I believe this is the correct behavior). But I am not sure how to access the name or caption. For reference, I'm using AstroJS and I am overwriting img tags in my Content by specifying a replacement in the components lookup attribute.

When an image is processed the props provided include anything set in the ATTR_HTML and then the src data, so filepath, format, and dimensions. I see that the parser captures these but I'm not sure if I'm doing something wrong or if they're not being passed through for further processing. https://github.com/rasendubi/uniorg/blob/cb0709da1478d92b26391e288d1133cf959e2ff7/packages/uniorg-parse/src/parser.ts#L2162C2-L2162C2

ispringle commented 1 year ago

As best as I can tell, the parser is grabbing this data and putting it into the affiliated object. But then org-rehype ignores this data, extracting the attrs but not the other possible values in there such as NAME and CAPTION:

https://github.com/rasendubi/uniorg/blob/cb0709da1478d92b26391e288d1133cf959e2ff7/packages/uniorg-rehype/src/org-to-hast.ts#L442

rasendubi commented 1 year ago

Hey, you're correct that #+NAME: and #+CAPTION: are ignored by uniorg-rehype.

I think the good behavior is to transform

#+CAPTION: hello
[[image.png]]

into:

<figure>
  <img src="image.png" />
  <figcaption>hello</figcaption>
</figure>

I think that should be a straightforward fix somewhere around here: https://github.com/rasendubi/uniorg/blob/cb0709da1478d92b26391e288d1133cf959e2ff7/packages/uniorg-rehype/src/org-to-hast.ts#L444-L446

#+NAME: is not exported in org-export but can be referenced with Internal Links (currently not supported #77).

ispringle commented 1 year ago

Yes, I was thinking it would be best to just pass this data without changing how it renders, since org-export never reaches for the CAPTION or NAME, as you suggest. Instead it makes sense to me at least that uniorg would just ensure this data is passed on so that it can be used for further use if desired.