public inbox archive for pandoc-discuss@googlegroups.com
 help / color / mirror / Atom feed
From: "'William Lupton' via pandoc-discuss" <pandoc-discuss-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>
To: pandoc-discuss-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Subject: Re: Inserting attributes into elements
Date: Thu, 15 Jun 2023 11:13:19 +0100	[thread overview]
Message-ID: <CAEe_xxiL-3qDCB8EpKca2YpAaAtamAYdX=antnbJRHJpzUkWow@mail.gmail.com> (raw)
In-Reply-To: <37d8c191-388e-164e-6955-9014b4f0a4a0-FcZObrvlYduBUy7/sJONFg@public.gmane.org>

[-- Attachment #1: Type: text/plain, Size: 6229 bytes --]

Can you give an outline of how you're processing Image and Figure elements?
If you're changing the image style in Image() and then return the modified
image then I would indeed expect this modified image to show up in Figure()
(which, with the default traversal order, will be called later). I tried a
simple example and it seemed to work as expected.

Also note that https://pandoc.org/lua-filters.html#pandoc.utils.stringify
expects an element (Pandoc, Meta, Block, or Inline). I guess you can't pass
it an https://pandoc.org/lua-filters.html#type-attributes object; when I
tried your code I got this error:

Error running filter figure.lua:
table expected, got AttributeList
stack traceback:
figure.lua:5: in function 'Figure'

On Thu, 15 Jun 2023 at 02:19, H <agents-FcZObrvlYduBUy7/sJONFg@public.gmane.org> wrote:

> On 06/14/2023 01:30 PM, BPJ wrote:
> >
> > Pandoc's document module used to not support attributes at all. IIRC
> attributes were first introduced for fenced code blocks, then extended to
> inline code. Spans and divs (in the Pandoc sense) were introduced
> specifically to provide containers for arbitrary content to which
> attributes can be attached. At the same time (IIRC) attributes were
> extended to headings ("Header"), links and images. It was decided not to
> extend attributes to other elements as that would entail huge changes to
> the code base. Later when Pandoc's table model was changed the new table
> model included attributes.
> >
> > Code needs attributes to allow to attach highlighting information to it,
> and headings and images need them too for various reasons, and links
> probably came along for the ride together with images. Normally divs and
> spans are enough for all other cases, because in regular CSS in an external
> file or embedded in the `<head>` of an HTML document you can use a child
> selector, e.g. in Markdown you type
> >
> > ``````markdown
> > :::class
> > ****
> > :::
> > ``````
> >
> > and then you style the rule with
> >
> > ``````css
> > div.class hr { ... }
> > ``````
> >
> > Your imposed limitation of not being able to use external CSS creates
> problems which most users simply don't have. For the horizontal rule case
> you can use a raw block to insert the HTML directly, if you are not going
> to generate other formats from the source:
> >
> > ``````markdown
> > Para before.
> >
> > ```{=html}
> > <hr style="...">
> > ```
> >
> > Para after
> > ``````
> >
> > You can also use a filter to do things like this:
> >
> > ``````lua
> > local hr_filter = {
> >   HorizontalRule = function()
> >     return pandoc.RawBlock('html', '<hr style="...">')
> >   end
> > }
> > function Div(div)
> >   if div.classes:includes('class') then
> >     return div:walk(hr_filter).content
> >   end
> > end
> > ``````
> >
> >
> > I sometimes post-process HTML generated by pandoc with with Mojo::Dom <
> https://metacpan.org/pod/Mojo::DOM> to transfer attributes from wrapping
> divs/spans to contained elements and remove the wrapper, or just to set
> attributes to elements contained in wrappers. The API makes such changes
> very easy. You basically find elements in an HTML document with CSS
> selectors, then loop through the found elements and change them in-place
> with Perl code. Adding/removing/changing attributes is very easy: you just
> treat the element object as if it is a hash (associative array) reference
> containing the attributes! Then when you are done you print the document
> object to a file or stdout.
> >
> Thank you for the explanation. I did resort to creating the <hr ... /> in
> the filter.
>
> Now another problem - I have multiple images in my markdown document and a
> <figure></figure> tag pair gets added around the <image> which is fine.
>
> However, while processing the <figure> block I want to make changes to the
> default style attribute <image> for some of the images. Using the logging
> module I find e.g.:
>
> (#) figure Figure {
>   attr: Attr {
>     attributes: AttributeList {
>       style: "margin: 0px;"
>     }
>     classes: List {}
>     identifier: ""
>   }
>   caption: {
>     long: Blocks {}
>   }
>   content: Blocks[1] {
>     [1] Plain {
>       content: Inlines[1] {
>         [1] Image {
>           attr: Attr {
>             attributes: AttributeList {}
>             classes: List {}
>             identifier: ""
>           }
>           caption: Inlines[1] {
>             [1] Str "whatever"
>           }
>           src: "https://www.somedomain.tld/images/someimage.jpg"
>           title: ""
>         }
>       }
>     }
>   }
> }
>
>
> and if look at the logging output for the Image I find:
>
> #) image Image {
>   attr: Attr {
>     attributes: AttributeList {
>       style: "height: auto; width: 100%; object-fit: contain;"
>     }
>     classes: List {}
>     identifier: ""
>   }
>   caption: Inlines[1] {
>     [1] Str "whatever"
>   }
>   src: "https://www.somedomain.tld/images/someimage.jpg"
>   title: ""
> }
>
> While processing the Figure element in the filter, I want to change the
> style attributes for the Image listed above. They show up correctly in the
> logging module output for Image above but the logging output for Figure
> shows an empty list.
>
> I thought
> print(pandoc.utils.stringify(el.content[1].content[1].attr.attributes))
> would give me the attributes but it does not.
>
> Could this be a bug?
>
> --
> You received this message because you are subscribed to the Google Groups
> "pandoc-discuss" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to pandoc-discuss+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/pandoc-discuss/37d8c191-388e-164e-6955-9014b4f0a4a0%40meddatainc.com
> .
>

-- 
You received this message because you are subscribed to the Google Groups "pandoc-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email to pandoc-discuss+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To view this discussion on the web visit https://groups.google.com/d/msgid/pandoc-discuss/CAEe_xxiL-3qDCB8EpKca2YpAaAtamAYdX%3DantnbJRHJpzUkWow%40mail.gmail.com.

[-- Attachment #2: Type: text/html, Size: 8465 bytes --]

  parent reply	other threads:[~2023-06-15 10:13 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-13 20:37 H
     [not found] ` <76a72c07-6699-d243-ae20-64808682ec9e-FcZObrvlYduBUy7/sJONFg@public.gmane.org>
2023-06-13 21:00   ` 'William Lupton' via pandoc-discuss
     [not found]     ` <CAEe_xxgeoT3UjKy0vK2b_w87d-ovNgpL_gRdyDeyb6+4SztxQA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2023-06-13 21:16       ` H
     [not found]         ` <F6DC033A-83F1-48E8-9947-A372BB0366E7-FcZObrvlYduBUy7/sJONFg@public.gmane.org>
2023-06-13 21:19           ` H
     [not found]             ` <90C7A30F-C0FA-49D8-B0CD-6521B58113F1-FcZObrvlYduBUy7/sJONFg@public.gmane.org>
2023-06-13 21:27               ` Bastien DUMONT
2023-06-13 21:38                 ` 'William Lupton' via pandoc-discuss
     [not found]                   ` <CAEe_xxj=P-e03Z6A4BbbqyCAdiCgpxs3cGR8WH_P590Q+bQkWg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2023-06-13 21:58                     ` H
     [not found]                       ` <CA9D2999-4E90-450E-A709-0ECCA45E3494-FcZObrvlYduBUy7/sJONFg@public.gmane.org>
2023-06-14  6:38                         ` 'William Lupton' via pandoc-discuss
2023-06-13 22:05                 ` H
     [not found]                   ` <0a6aa41a-fe72-a1e8-2630-ec6070c0bbb3-FcZObrvlYduBUy7/sJONFg@public.gmane.org>
2023-06-13 22:53                     ` H
     [not found]                       ` <74253f39-02db-dc2e-2ae1-9d27aaab82ea-FcZObrvlYduBUy7/sJONFg@public.gmane.org>
2023-06-14  0:34                         ` H
     [not found]                           ` <61724767-ada0-133f-6751-5884c7460a25-FcZObrvlYduBUy7/sJONFg@public.gmane.org>
2023-06-14  6:49                             ` Bastien DUMONT
2023-06-14 16:23                               ` H
     [not found]                                 ` <b696e1f5-0648-c8f0-4117-257896e40f8b-FcZObrvlYduBUy7/sJONFg@public.gmane.org>
2023-06-14 17:30                                   ` BPJ
     [not found]                                     ` <CADAJKhDMVj8SknY2u1mnGOsbQG59sAJqT=vfJcUuiRM-dHempA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2023-06-15  1:19                                       ` H
     [not found]                                         ` <37d8c191-388e-164e-6955-9014b4f0a4a0-FcZObrvlYduBUy7/sJONFg@public.gmane.org>
2023-06-15 10:13                                           ` 'William Lupton' via pandoc-discuss [this message]
2023-06-15 13:00                                           ` BPJ
     [not found]                                             ` <CADAJKhBjJTZki4np=oSfbbcmtBjEahCU4440tRfOh_6TMzSAYw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2023-06-16  1:12                                               ` H

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAEe_xxiL-3qDCB8EpKca2YpAaAtamAYdX=antnbJRHJpzUkWow@mail.gmail.com' \
    --to=pandoc-discuss-/jypxa39uh5tlh3mbocffw@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).