public inbox archive for pandoc-discuss@googlegroups.com
 help / color / mirror / Atom feed
From: "balaj...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org" <balaji.dutt-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
To: pandoc-discuss <pandoc-discuss-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>
Subject: Re: Pointers on modifying Plain objects(?)
Date: Sun, 25 Dec 2022 01:15:12 -0800 (PST)	[thread overview]
Message-ID: <5257c49e-968d-40bf-a398-ae104a53c5c8n@googlegroups.com> (raw)
In-Reply-To: <C927BB76-A05B-48E2-8277-0DED656D13CA-9EawChwDxG8hFhg+JK9F0w@public.gmane.org>


[-- Attachment #1.1: Type: text/plain, Size: 4554 bytes --]

Hi Albert,

Merry Christmas to you!

Your suggestion seemed really promising, but when I try to create a filter 
using the couple of bits of code you'd suggested, I get a compilation 
error. Here's the filter that I came up with:

function Plain (plain)

local done_marker = pandoc.List{pandoc.Str '[X]', pandoc.Space()}
local prefix = pandoc.List{plain.content[1], plain.content[2]}

      if prefix == done_marker then
        plain.content:remove(2) -- remove space
        plain.content:remove(1) -- remove checkbox
        pandoc.Strikeout(plain.content)
        plain.content = done_marker .. pandoc.Strikeout(plain.content)
      end

return plain
end

Unfortunately when I try to run pandoc with this filter I get the following 
error:

Error running filter 
C:\Users\Balaji\AppData\Roaming\pandoc\filters\strikethrough.lua:
...\Balaji\AppData\Roaming\pandoc\filters\strikethrough.lua:10: bad 
argument #2 to 'concat' (table expected, got Inline)

As you might be able to guess from the fact that I switched to Python when 
trying this earlier, I have really no expertise in Lua. I tried to use 
table.insert in place of concat, and now the filter does not throw an error 
but it does not seem to do anything either.

Any suggestions?

On Saturday, 24 December 2022 at 18:27:04 UTC+8 Albert Krewinkel wrote:

> We could do this by passing the full content to the strikeout constructor. 
> We'd remove, then re-add the checkbox later:
>
> plain.content:remove(2) -- remove space
> plain.content:remove(1) -- remove checkbox
> plain.content = done_marker .. 
>   pandoc.Strikeout(plain.content)
>
>
>
> Am 24. Dezember 2022 09:37:58 MEZ schrieb "balaj...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org" <
> balaj...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>:
>>
>> Thanks for the pointers Albert! It did help me get started. Unfortunately 
>> when I started looping through the Plain object, I realized that the 
>> individual strings were represented as separate elements so there did not 
>> seem to be an easy way to apply a strikethrough formatting for the entire 
>> sentence. The best I would be able to do was apply the strikethrough 
>> word-by-word but with that approach, the final HTML did not look very 
>> pleasing.
>>
>> In the end, I wound up writing a small Python script that would modify a 
>> file with the pandoc native format directly (outside of pandoc) and then 
>> feed the modified native format file back into pandoc. After a couple of 
>> false starts with the regex and then the native output becoming invalid, 
>> I've got it working fairly well for my purposes.
>>
>> On Thursday, 22 December 2022 at 20:21:19 UTC+8 Albert Krewinkel wrote:
>>
>>> "balaj...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org" <balaj...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> writes: 
>>>
>>> > The specific scenario I'm looking at is a Markdown file such as this: 
>>> > 
>>> > ### Todo 
>>> > - [ ] Foo 
>>> > - [X] Quux Qux 
>>>
>>> This is an interesting case because it is more complex than it seems. 
>>> The reason is pandoc's `task_list` extension that causes pandoc to 
>>> handle these checkboxes specially, converting them to [Str "☐", Space] 
>>> and [Str "☒", Space]. So we'll have to match on that in our filter. 
>>>
>>> A good approach would be to write a filter for Plain, like so: 
>>>
>>> ``` lua 
>>> function Plain (plain) 
>>> -- modify the object here 
>>> return plain 
>>> end 
>>> ``` 
>>>
>>> Pandoc will then do all necessary document traversals automatically, 
>>> the function gets applied to all `Plain` elements in the document. 
>>>
>>> To check for the prefix, we'd do something like 
>>>
>>> ``` lua 
>>> local done_marker = pandoc.List{pandoc.Str '☒', pandoc.Space()} 
>>> local prefix = pandoc.List{plain.content[1], plain.content[2]} 
>>> if prefix == done_marker then 
>>> -- modify content 
>>> end 
>>> ``` 
>>>
>>> I hope that's enough to get you started. Happy hacking! 
>>>
>>>
>>> -- 
>>> Albert Krewinkel 
>>> GPG: 8eed e3e2 e8c5 6f18 81fe e836 388d c0b2 1f63 1124 
>>>
>>

-- 
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/5257c49e-968d-40bf-a398-ae104a53c5c8n%40googlegroups.com.

[-- Attachment #1.2: Type: text/html, Size: 6495 bytes --]

  parent reply	other threads:[~2022-12-25  9:15 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-12-22  8:53 balaj...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
     [not found] ` <8af6876b-72cc-448e-9f5e-7d12ccdf2ad8n-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>
2022-12-22 12:05   ` Albert Krewinkel
     [not found]     ` <878riz8wf4.fsf-9EawChwDxG8hFhg+JK9F0w@public.gmane.org>
2022-12-24  8:37       ` balaj...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
     [not found]         ` <8f0e8d81-7f0b-49a7-b9b5-d78b19a0b1ban-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>
2022-12-24 10:26           ` Albert Krewinkel
     [not found]             ` <C927BB76-A05B-48E2-8277-0DED656D13CA-9EawChwDxG8hFhg+JK9F0w@public.gmane.org>
2022-12-25  9:15               ` balaj...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org [this message]
     [not found]                 ` <5257c49e-968d-40bf-a398-ae104a53c5c8n-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>
2022-12-25  9:55                   ` Albert Krewinkel
     [not found]                     ` <877cyf7qb2.fsf-9EawChwDxG8hFhg+JK9F0w@public.gmane.org>
2022-12-27  4:42                       ` balaj...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org

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=5257c49e-968d-40bf-a398-ae104a53c5c8n@googlegroups.com \
    --to=balaji.dutt-re5jqeeqqe8avxtiumwx3w@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).