[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: boxquote [was: bcm43xx wireless with static ip]



* Elimar Riesebieter <riesebie@lxtec.de> [2007-07-07 18:36]:
> On Sat, 07 Jul 2007 the mental interface of
> Felix C. Stegerman told:
>
> > * "Felix C. Stegerman" <flx@obfusk.net> [2007-07-06 17:41]:
> [...]
> > And I've even added something:
> >
> > $ boxquote -c 'fortune -s perl'
> > ,----[ fortune -s perl | ]
> > | It's easy to solve the halting problem with a shotgun.   :-)
> > |     -- Larry Wall in <199801151836.KAA14656@wall.org>
> > `----
>
> And what is the output of
>
> $ cat boxqoute | boxqoute
>
> ?

$ boxquote -c 'wc -l $(which boxquote)'
,----[ wc -l $(which boxquote) | ]
| 290 /usr/local/bin/boxquote
`----

Since it's 290 lines, I've chosen not to paste, but instead to attach
it.


- Felix

-- 
Felix C. Stegerman <flx@obfusk.net>                  http://obfusk.net
~ "Any sufficiently advanced bug is indistinguishable from a feature."
~   -- R. Kulawiec
~ vim: set ft=mail tw=70 sw=2 sts=2 et:
#!/usr/bin/perl

# ********************************************************************
#
# boxquote - quote text with a semi-box [based on boxquote.el]
#
# ********************************************************************
#
# Felix C. Stegerman <flx@obfusk.net>
# 2007-07-06 [22:47]
#
# ********************************************************************
#
# Copyright (C) 2007  Felix C. Stegerman
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
# USA
#
# ********************************************************************

our $VERSION = '2007-07-06 [22:47]';

# ********************************************************************

use strict;
use warnings;

# ********************************************************************

use Getopt::Long;
use Pod::Usage;

# ********************************************************************

my $prog  = 'boxquote';
my %opts  = (
  'bottom-corner' => '`',
  'command'       => [],
  'hide-title'    => 0,
  'label'         => '(standard input)',
  'side'          => '| ',
  'title-format'  => '[ %s ]',
  'top-and-tail'  => '----',
  'top-corner'    => ',',
);

# ********************************************************************

Getopt::Long::Configure ('auto_version');

GetOptions (
  \%opts, 'help|h|?', 'man', 'bottom-corner|bc=s', 'command|c=s',
  'hide-title|ht!', 'label|l=s', 'side|s=s', 'title-format|tf=s',
  'top-and-tail|tt=s', 'top-corner|tc=s',
) or pod2usage (2);

$opts{'help'} and pod2usage (1);
$opts{'man'}  and pod2usage ('-verbose' => 2);

# ********************************************************************

sub print_top ($)                     # top text
{
  my $file  = shift;                  # file name

  my $label = $file eq '-' ? $opts{'label'} : $file;

  print   $opts{'top-corner'};
  print   $opts{'top-and-tail'};
  printf  $opts{'title-format'}, $label unless $opts{'hide-title'};
  print   "\n";
}

sub print_side ()                     # side text
{
  print   $opts{'side'};
}

sub print_bottom ()                   # bottom text
{
  print   $opts{'bottom-corner'};
  print   $opts{'top-and-tail'};
  print   "\n";
}

sub process ($$)                      # process file[handle]
{
  my $HANDLE  = shift;
  my $title   = shift;

  print_top ($title);

  while (<$HANDLE>)
    {
      print_side; print $_;
    }

  print_bottom;
}

# ********************************************************************

my @commands  = @{$opts{'command'}};
my @files     = @ARGV     ? @ARGV :
                @commands ? (   ) :
                            ('-') ;
my $FILE      = undef;

# ********************************************************************

foreach my $cmd (@commands)
  {
    open ($FILE, '-|', $cmd)
      or die "Could not open pipe from `$cmd': $!";

    process ($FILE, "$cmd |");

    close $FILE;
  }

# ********************************************************************

foreach my $file (@files)
  {
    $file eq '-' ? open ($FILE, '-') : open ($FILE, '<', $file)
      or die "Could not open `$file': $!";

    process ($FILE, $file);

    close $FILE;
  }

# ********************************************************************

# vim: set ft=perl tw=70 sw=2 sts=2 et:

__END__

=begin comment

  boxquote.pod

  Felix C. Stegerman <flx@obfusk.net>
  2007-07-07 [15:18]

=end comment

=head1 NAME

boxquote - quote text with a semi-box

=head1 SYNOPSIS

B<boxquote> [I<options>] [I<file(s)>]

=head1 DESCRIPTION

The B<boxquote> C<perl(1)> script does more or less what
B<boxquote.el> [on which it is based] does [for C<emacs(1)>].

From the description of boxquote.el:

  "boxquote provides a set of functions for using a text quoting style
  that partially boxes in the left hand side of an area of text; such
  a marking style might be used to show externally included text or
  example code."

  ,----
  | The default style looks like this.
  `----

Thus, B<boxquote> prints each I<file> (or standard input if the file
name F<-> is given) using said quoting style.  When no files and no
commands (see B<--command>) are specified, standard input is used.

=head1 OPTIONS

=over 4

=item B<--help>, B<-h>, B<-?>

Display a brief help message and exit.

=item B<--man>

Display the B<boxquote> man page and exit.

=item B<--bottom-corner>, B<-bc> I<string>

Use I<string> for the bottom corner of the box;
the default is "`".

=item B<--command>, B<-c> I<command>

Open and read from a pipe to I<command> instead of reading from a
file.  This option may be supplied multiple times to specify several
commands.

Note: commands will be processed before files.

=item B<--hide-title>, B<-ht>

Don't title the box with the file (or command) name.

=item B<--label>, B<-l> I<label>

Use I<label> as the title for standard input (F<->);
the default is "(standard input)".

=item B<--side>, B<-s> I<string>

Use I<string> for the side of the box;
the default is "| ".

=item B<--title-format>, B<-tf> I<string>

Use I<string> as the format string to use when creating a box title;
the default is "[ %s ]".

=item B<--top-and-tail>, B<-tt> I<string>

Use I<string> at the top and tail of the box;
the default is "----".

=item B<--top-corner>, B<-tc> I<string>

Use I<string> for the top corner of the box;
the default is ",".

=item B<--version>, B<-v>

Output version information and exit.

=back

=head1 EXAMPLES

  $ echo 'the quick brown fox jumps over the lazy dog' | boxquote
  ,----[ (standard input) ]
  | the quick brown fox jumps over the lazy dog
  `----

  $ boxquote -c 'echo Hello, World' --hide-title
  ,----
  | Hello, World
  `----

  $ boxquote -c 'fortune -s perl'
  ,----[ fortune -s perl | ]
  | At many levels, Perl is a "diagonal" language.
  |             -- Larry Wall in <199709021854.LAA12794@wall.org>
  `----

=head1 AUTHOR

Felix C. Stegerman <flx@obfusk.net>

=head1 BUGS

If you find bugs in B<boxquote>, please report these to the author by
e-mail.

=head1 SEE ALSO

B<boxquote.el>, C<perl(1)>, L<perlgpl>

=head1 COPYRIGHT

Copyright (C) 2007  Felix C. Stegerman

This program and its documentation are free software; you can
redistribute them and/or modify them under the terms of the GNU
General Public License version 2 as published by the Free Software
Foundation.  See the LICENSE file for more information.

=for comment
  vim: set ft=perl tw=70 sw=2 sts=2 et:

=cut

Attachment: signature.asc
Description: Digital signature


Reply to: