public inbox archive for pandoc-discuss@googlegroups.com
 help / color / mirror / Atom feed
From: Melroch <melroch-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
To: pandoc-discuss-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Subject: Re: Markdown -> plain: How to preserve blockquotes?
Date: Fri, 8 Sep 2017 22:16:13 +0200	[thread overview]
Message-ID: <CADAJKhC1y5ip7M=HiEUjF2urMyciCUK+HroXw+5wabi7n4XXRA@mail.gmail.com> (raw)
In-Reply-To: <20170905181733.GD10851-9Rnp8PDaXcadBw3G0RLmbRFnWt+6NQIA@public.gmane.org>

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

I have successfully used a filter to make plain output look like Perl POD
documentation format. The beauty of plain is that you can just inject Str
elements with whatever markup you like and plain will just output it
verbatim. For example link URLs are present in the JSON which the filter
receives, so you can just replace the Link elements with whatever literal
strings you like which include the link text and the URL. For example a
[Pandoc::Filter][] based filter for inserting the URL in angle brackets and
the title if any in parentheses after the link text:

~~~~~~perl
#!/usr/bin/env perl

use 5.010001;
use utf8;
use strict;
use warnings;

use Pandoc::Filter;
use Pandoc::Elements;

pandoc_filter Link => sub {
    my $url = $_->url;
    my $title = $_->title;
    my $content = $_->content;
    $title &&= qq{ ($title)};
    return [@$content, Space, Str "<$url>", Str $title];
};

~~~~~~

or to get traditional email emphasis:

~~~~~~perl
#!/usr/bin/env perl

use 5.010001;
use utf8;
use strict;
use warnings;

use Pandoc::Elements;
use Pandoc::Walker qw[ action transform ];

my $action = action Emph => sub {
    my($elem, $action) = @_;
    my $content = transform $elem->content, $action, $action; # recurse
    return [Str '_', @$content, Str '_'];
},
Strong => sub {
    my($elem, $action) = @_;
    my $content = transform $elem->content, $action, $action; # recurse
    return [Str '*', @$content, Str '*'];
};

my $doc = pandoc_json();

transform $doc, $action, $action; # action both as callback and argument!

print $doc->to_json;
~~~~~~

Block quotes are tougher but it could be done if you run pandoc (with
Pandoc.pm) on the content with the same filter(s) to fix nested block
quotes,
then insert '> ' at the start of every line:

~~~~~~perl
# less-plain.pl

use Pandoc::Elements;
use Pandoc::Walker qw[ action transform ];
use Pandoc; # wrapper module

my $doc = pandoc_json();
my $meta = $doc->meta;
my $api_version = $doc->api_version;

my $action = action BlockQuote => sub {
    my($elem, $action) = @_;
    my $content_doc = Document {
        blocks => $elem->content, # works because content is an array of
blocks!
        meta => $meta,
        api_version => $api_version,
    };
    # convert with pandoc!
    my $content = $content_doc->to_pandoc( -t => 'plain', -F => $0 );
    $content =~ s{^}{> }mg;
    return Para [ Str $content ];
},
Link => ...,   # replace ... with the subs above, and/or insert your own!
Emph => ...,
Strong => ...;

transform $doc, $action, $action; # action both as callback and argument!

print $doc->to_json;
~~~~~~

The trick with calling pandoc works because the `$0` variable contains the
path to the current program which is the filter itself.
Naturally you would like to put all your modifications in the same filter.
[Pandoc::Filter]: https://metacpan.org/pod/Pandoc::Filter

/bpj

Den 5 sep 2017 20:18 skrev "John MacFarlane" <jgm-TVLZxgkOlNX2fBVCVOL8/A@public.gmane.org>:

> You might have some success with filters.
> You could use Markdown output, and intercept constructions
> like Strong and Emph, replacing them with something else.
>
> +++ Francisco Lopes [Sep 05 17 11:02 ]:
>
>>   Em terça-feira, 5 de setembro de 2017 09:16:41 UTC-3, Kolen Cheung
>>   escreveu:
>>
>>     As I guessed you don't really want to have plaintext. Again, try
>>     turning off markdown extensions to make it more "lightweight" and
>>     tailor that as your "plaintext".
>>
>>   The problem is that turning off markdown extensions to achieve plain
>>   text will simply not work afaik.
>>   For example, current plain text output will turn bold markdown **text**
>>   to all caps plain TEXT. Which I find nice,
>>   I find it logical for plain text output. Can't it be done by turning
>>   off flags?
>>   The thing is that what I want has no standard yet, it's something
>>   target for plain text EML, between current plain
>>   text and markdown. IMO, **foo** etc, clutters plain text output.
>>   Another possible feature of such target output
>>   could be to always move url links to footer while leaving anchors in
>>   the main content.
>>   Regards
>>
>>     Regarding treating list marker as plaintext or not: we need to ask
>>     ourselves what do we mean when we say plaintext and markdown. In the
>>     "markdown wins the plaintext war" camp, markdown is plaintext. Just
>>     to look up wikipedia in <[1]https://en.m.wikipedia.org/
>>     wiki/Plain_text>, non-binary formats are plaintext, like most of the
>>     pandoc formats including HTML. So pandoc's plain format definitely
>>     has a special meaning than these. And @jgm just defined it above.
>>     Lastly, when I say the list marker isn't plaintext, I'm thinking in
>>     terms of "stringify". Like if given a document, if I'm to remove
>>     every formatting features, what would I be left with? Or in other
>>     words, if I speak it out without any help from those markups, what
>>     would that be? In this sense, a list in *plain* text is like "Give
>>     me a pen, pencil, and ruler." By the way, I think in typography,
>>     when you write that in a list (with list markers), the rule to apply
>>     punctuation marks and connectives is exactly as if you write it out
>>     in a sentence. i.e. the list marker is just a visual element to
>>     better represent the information.
>>
>>   --
>>   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 [2]pandoc-discuss+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
>>   To post to this group, send email to
>>   [3]pandoc-discuss-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
>>   To view this discussion on the web visit
>>   [4]https://groups.google.com/d/msgid/pandoc-discuss/9d2b4cdb-b236-42bd-
>>   baea-ff53da0ca1ed%40googlegroups.com.
>>   For more options, visit [5]https://groups.google.com/d/optout.
>>
>> References
>>
>>   1. https://en.m.wikipedia.org/wiki/Plain_text
>>   2. mailto:pandoc-discuss+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
>>   3. mailto:pandoc-discuss-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
>>   4. https://groups.google.com/d/msgid/pandoc-discuss/9d2b4cdb-b2
>> 36-42bd-baea-ff53da0ca1ed-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org?utm_medium=email&
>> utm_source=footer
>>   5. https://groups.google.com/d/optout
>>
>
> --
> 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 post to this group, send email to pandoc-discuss-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
> To view this discussion on the web visit https://groups.google.com/d/ms
> gid/pandoc-discuss/20170905181733.GD10851%40Johns-MacBook-Pro.local.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
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 post to this group, send email to pandoc-discuss-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To view this discussion on the web visit https://groups.google.com/d/msgid/pandoc-discuss/CADAJKhC1y5ip7M%3DHiEUjF2urMyciCUK%2BHroXw%2B5wabi7n4XXRA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

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

      parent reply	other threads:[~2017-09-08 20:16 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-09-02  5:16 Francisco Lopes
     [not found] ` <b9e503e1-de59-4086-8104-64f32c8bfa5f-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>
2017-09-03  6:53   ` Kolen Cheung
     [not found]     ` <d5636ec4-4c36-4514-a87a-3622e37d4986-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>
2017-09-03 12:36       ` Francisco Lopes
     [not found]         ` <cd94eef0-e89b-4aa2-969e-17cf6bb99162-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>
2017-09-04  1:58           ` Kolen Cheung
     [not found]             ` <8e1e0a64-7e87-4dbd-b669-0b55854fe110-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>
2017-09-04  8:33               ` Francisco Lopes
     [not found]                 ` <e364ab5a-9752-47ce-ad05-9ece6e099b77-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>
2017-09-04  9:36                   ` Kolen Cheung
     [not found]                     ` <eaa32942-b318-456e-9ed6-7db797e050de-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>
2017-09-04 13:53                       ` John Muccigrosso
2017-09-04 16:21                       ` Francisco Lopes
2017-09-04 18:52                       ` Francisco Lopes
     [not found]                         ` <fb9edf5e-3b0d-48b9-b10e-29f738a80987-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>
2017-09-05  4:53                           ` John MacFarlane
     [not found]                             ` <20170905045318.GE3765-9Rnp8PDaXcadBw3G0RLmbRFnWt+6NQIA@public.gmane.org>
2017-09-05  5:20                               ` Francisco Lopes
     [not found]                                 ` <6ec4d317-8de4-476d-86c5-91438eb47729-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>
2017-09-05  5:28                                   ` Francisco Lopes
     [not found]                                     ` <ae3ba6b6-616a-4cb5-8bb2-be45b575d54e-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>
2017-09-05 12:16                                       ` Kolen Cheung
     [not found]                                         ` <d6d7afde-883b-43da-9727-4ce24a08a43f-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>
2017-09-05 18:02                                           ` Francisco Lopes
     [not found]                                             ` <9d2b4cdb-b236-42bd-baea-ff53da0ca1ed-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>
2017-09-05 18:17                                               ` John MacFarlane
     [not found]                                                 ` <20170905181733.GD10851-9Rnp8PDaXcadBw3G0RLmbRFnWt+6NQIA@public.gmane.org>
2017-09-08 20:16                                                   ` Melroch [this message]

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='CADAJKhC1y5ip7M=HiEUjF2urMyciCUK+HroXw+5wabi7n4XXRA@mail.gmail.com' \
    --to=melroch-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).