Category: |
PerlMonks Related Scripts |
Author/Contact Info |
Soren / somian / Intrepid check here |
Description: |
This is "pmnodecomp-blockquoter", and if you can say that 5 times and still chew salt-water taffy afterwards you get a prize. It's a helper for working in a Xterm shell and composing node text for posts here on Perlmonks. If you are replying to an existing node and wish to cite a brief
part of what a previous poster has written, you may like to do so using a style that embraces the quote text in <blockquote> tags. This makes it visually stand out as being text
attributable to another poster than yourself.
Related Links:
A cryptographically signed copy of the latest release of the program may also be obtained at the site:
here.
Update:
Now does what theorbtwo's reply and bart's reply wanted it to do. Also fixed a few other flaws. We now have a plugin-ready script that users can invent their own transmutations for.
Also the example shown below ought to be something like this instead (but see later at Second Update for an even better plan):
Then I switch to a text term (Xterm) and type:
$ pmnodecomp-blockquote <<'NOPOL8N'
which waits for me to paste the X cutbuffer / clipboard selection at the prompt.
Thanks to merlyn for the righteous slap that dispels brain-fevered idiocy like a bucket of icewater on a pair of amorous mutts.
There's nothing automagickal or sophisticated about it, it's a very simple tool. It is for when you don't care to fire up a text editor just for a quick-ish reply node, but you want to efficiently create a blockquote as part of your contribution. It's for a very lazy approach, made especially for those of us who's typing skills are not world-class ;-).
This was also an excuse for me to beat my head against the strangeness that is Perl's
format and write functionality until I understood it well enough to
write something useful employing them.
Users of a *NIX-like ('sh'-like) shell will get the best use out of this.
The next section is superceded by later refinements and corrections. Left for historical thread context.
I like the style of workflow in which I make an X-Windows selection of the text I wish to quote
from the Perlmonks node (in my WWW browser). Then I switch to a text term (Xterm) and type:
$ cat <<'DONE' | pmnodecomp-blockquote
which waits for me to paste the X cutbuffer / clipboard selection at the
prompt. Shell veterans may know other ways (TMTOWTDI) of getting the desired text poured into
STDIN and then issuing the EOF (generally <CTRL-D> on *NIX, IAMNM). Anyway that's the
general idea.
A completely empty newline must be present for paragraphs to be handled as separate from the preceeding one. This could be construed as a limitation ;-).
Have fun -- Soren / somian / Intrepid
Second Update
After doing some testing I can recommend a refined "workflow" scheme for those who might be left
in a second or two of puzzlement about how to use this tool otherwise. If you have the Linux/*nix
tool xclip(1) on your system you can use it nicely like so:
- Make your selection with mouse in the source application/document window.
- Switch to your Xterm-like tool and issue the following command, i.e. :
$ xclip -selection p -o | \
pmnodecomp-blockquoter | \
xclip -fi -selection c
The -f switch to the last invocation of xclip will let that tool
echo the output processed text to your terminal, acting as a preview so that you
can see what was done. Eliminate it if you want silent operation.
- Switch to the Perlmonks node you wish to compose in your browser, place text
cursor in the input box and issue CTRL-V or whatever maps to "paste"
in your X environment. The blockquoted text now on the X clipboard will appear
at your cursor position.
I realize these instructions will seem like huge overkill to many of the experts on the site, but
we all had to learn somewhere, and I didn't want to leave novices to X or computers completely
up the creek w/o a periscope. Adapting these instructions for another kind of environment that
still has a usable shell (DOS would not fall under that category) is left as an exercise to the
readers :-) |
#!/usr/bin/env perl
eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
if 0; # not running under some shell
# $Author$ Last modified: 14 Dec 2003 15:30:18
# Suggested name: "pmnodecomp-blockquoter" - shorten if wished.
# Or better yet make a symlink or alias.
use strict;
BEGIN {
use vars qw! $plugin !;
$plugin =
(eval { # Place your own home-brewed filter module below.
# This is only a suggestive example / default.
require PMntextFilter;
# import PMnTextFilter "quazzle wrench bangbar";
}) ? 'extern' : 'intern';
}
use warnings;
use vars qw! $DeBug $acq $outfm $rcnt $pictstr !,
qw! $amps $ltgt $sqbr !;
use subs qw! bbegin bendin newblk filtermeta !;
$DeBug = 0;
use constant rCNT => 66; # arbitrary length for output lines.
format EBLK =
</blockquote>
.
format BBLK =
<blockquote>
.
format NBLK =
<br><br>
.
if ($plugin eq 'extern')
{
$amps = sub { PMntextFilter::amps(@_) };
$ltgt = sub { PMntextFilter::ltgt(@_) };
$sqbr = sub { PMntextFilter::sqbr(@_) };
}
else
{
$amps = sub
{
my $amper = '&';
my $para = shift;
$para =~ s% \& %$amper%oxgm;
return $para;
};
$ltgt = sub
{
my ($lt,$gt) = ( '<','>' );
my $para = shift;
$para =~ s% \< %$lt%oxgm;
$para =~ s% \> %$gt%oxgm;
print STDERR "\n$acq\n" if $DeBug;
return $para;
};
$sqbr = sub
{
my ($sqbro,$sqbrc) =
( '[',']' );
my $para = shift;
$para =~ s% \[ %$sqbro%oxgm;
$para =~ s% \] %$sqbrc%oxgm;
print STDERR "\n$acq\n" if $DeBug;
return $para;
};
}
$pictstr = q[^] . q[<] x rCNT;
$outfm = qq[format STDOUT = ]
.qq[\n $pictstr\n]
. q[$acq] . qq[\n.\n];
eval $outfm;
die "Bad perl format!: $@" if $@;
my $splurt = sub { local $/ = qq[]; $acq = <STDIN> };
my $pc = 0;
bbegin;
while (&$splurt and $pc++ < 10000)
{
filtermeta $acq;
write while $acq;
newblk unless eof(STDIN);
}
bendin;
exit 0;
sub filtermeta
{ # Do what you want to here. Given is a minimal default.
$acq=&$amps($acq);
$acq=&$ltgt($acq);
$acq=&$sqbr($acq);
}
sub newblk
{
local $~ = "NBLK";
write;
}
sub bbegin
{
local $~ = "BBLK";
write;
}
sub bendin
{
local $~ = "EBLK";
write;
}
|
Re: Simple tool for making HTML blockquotes from text selections
by bart (Canon) on Dec 14, 2003 at 11:40 UTC
|
It doesn't escape HTML characters, it simply passes along the entered text, rewrapped, with extra <blockquote> tags around it. When I mentioned this in the Chatterbox, you appeared to not give a damn.
Update: Appearances can be desceptive, perhaps the author's tiredness could have played a role too &mdash after all, it was the middle of the night for him at the time; but from later conversations it appears to mainly have been a misunderstanding between us. Glad that has been cleared up. | [reply] [Watch: Dir/Any] |
•Re: Simple tool for making HTML blockquotes from text selections
by merlyn (Sage) on Dec 14, 2003 at 14:35 UTC
|
cat <<'DONE' | pmnodecomp-blockquote
Uh, what? Why the useless use of cat?
Especially when it means even more typing!
Perhaps you wanted:
pmnodecomp-blockquote <<'DONE'
instead.
| [reply] [Watch: Dir/Any] [d/l] [select] |
Re: Simple tool for making HTML blockquotes from text selections
by theorbtwo (Prior) on Dec 14, 2003 at 16:19 UTC
|
The problem with this is that it does not quote < and & properly. This isn't normaly a problem, because PM allows you to use < many places, escaping it itself, and browsers will display &foo; as such if "foo" is not a known escape. (It's important to note that the former is an explicit action of PM, to allow people to right $x<42, <g> and other similar things without additional effort, whereas the later is a normal part of rendering HTML, so even when a UA recives an entity that it does not know, the user has a chance to guess at what it means from the mnemonic name.
However, try writing a block quote of & <b>this should not be bold</b>
Warning: Unless otherwise stated, code is untested. Do not use without understanding. Code is posted in the hopes it is useful, but without warranty. All copyrights are relinquished into the public domain unless otherwise stated. I am not an angel. I am capable of error, and err on a fairly regular basis. If I made a mistake, please let me know (such as by replying to this node).
| [reply] [Watch: Dir/Any] |
Re: Simple tool for making HTML blockquotes from text selections
by TVSET (Chaplain) on Dec 14, 2003 at 23:11 UTC
|
Well, while we are on the subject, here is another way of editing posts for PM from gmax.
| [reply] [Watch: Dir/Any] |
|
++ for the handy link. and sorta on the same subject the
MozEX extension for
Firebird will add a 'Edit Textarea' to the right-click context menu for
textareas. mine is configured for VIM. when you exit your editor just
click in the textarea again to update the text. this is my favorite extension
ever.
there might be similar things for other browsers.
| [reply] [Watch: Dir/Any] |
|
| [reply] [Watch: Dir/Any] |
|
Re: Simple tool for making HTML blockquotes from text selections
by zengargoyle (Deacon) on Dec 14, 2003 at 22:15 UTC
|
if you're on a unixy box, take a look for a program called 'xclip'.
$ xclip -o | pmnodecomp-blockquote
it should take care of all of that ^D or <<EOF nonsense.
plus it's a good example of why 'useless use of cat' is a good thing (IMHO). using useless cat allows you to easily replace the useless cat by a usefull program changing only what comes before the pipe.
| [reply] [Watch: Dir/Any] [d/l] |
|
Thanks for the suggestion, zengargoyle, and also to TVSET (replies that follow).
I wanted to avoid giving the impression that I had appropriated your idea w/o so much as
a nod in your direction (in Updates above, in root node) -- in fact I came up with and reposted much
the same workflow plan independently before revisiting the node and seeing your reply.
Nonetheless thanks very much; obviously great minds ... or some kind of minds ... think
alike. ;-)
| [reply] [Watch: Dir/Any] |
Re: Simple tool for making HTML blockquotes from text selections
by exussum0 (Vicar) on Dec 15, 2003 at 05:04 UTC
|
The only way I'd modify this, is to take all the input in at once and shoot it back out after it's done.
Otherwise, if I'm working from stdin, I get this:
<blockquote>
sadlfjsafjlsdf
sadfkljsdlafjlsadf
sadfljsadfljsadfjlksaf
sadfkljsalfjlksdfj
sadlfjsafjlsdf sadfkljsdlafjlsadf sadfljsadfljsadfjlksaf
sadfkljsalfjlksdfj
</blockquote>
Play that funky music white boy..
| [reply] [Watch: Dir/Any] |
|
|