public inbox archive for pandoc-discuss@googlegroups.com
 help / color / mirror / Atom feed
From: H <agents-FcZObrvlYduBUy7/sJONFg@public.gmane.org>
To: pandoc-discuss-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Subject: Re: Inserting attributes into elements
Date: Wed, 14 Jun 2023 21:19:50 -0400	[thread overview]
Message-ID: <37d8c191-388e-164e-6955-9014b4f0a4a0@meddatainc.com> (raw)
In-Reply-To: <CADAJKhDMVj8SknY2u1mnGOsbQG59sAJqT=vfJcUuiRM-dHempA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>

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.


  parent reply	other threads:[~2023-06-15  1:19 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 [this message]
     [not found]                                         ` <37d8c191-388e-164e-6955-9014b4f0a4a0-FcZObrvlYduBUy7/sJONFg@public.gmane.org>
2023-06-15 10:13                                           ` 'William Lupton' via pandoc-discuss
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=37d8c191-388e-164e-6955-9014b4f0a4a0@meddatainc.com \
    --to=agents-fczobrvlydubuy7/sjonfg@public.gmane.org \
    --cc=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).