App-Basis-ConvertText2
view release on metacpan or search on metacpan
[options]
-h, -?, --help Show help
-c, --clean Clean up the cache before use
-e, --embed Embed images into HTML, do not use this if
converting to doc/odt
-o, --output Filename to store the output as, extension will
control conversion
-p, --prince Convert to PDF using princexml, can handle
embedded images
-s, --template name of template to use
-v, --verbose verbose mode
-w, --wkhtmltopdf Convert to PDF using wkhtmltopdf, can handle
embedded images
=head1 AUTHOR
kevin mulholland, moodfarm@cpan.org
=cut
use v5.10;
use strict;
use warnings;
use Data::Printer;
use POSIX qw(strftime);
use Try::Tiny;
use Path::Tiny;
use App::Basis;
use App::Basis::Config;
use App::Basis::ConvertText2;
# -----------------------------------------------------------------------------
my $MARKUP_DIR = "$ENV{HOME}/." . get_program();
$MARKUP_DIR = $ENV{MARKUP_DIR} if ( $ENV{MARKUP_DIR} );
my $CACHE_DIR = "/tmp/" . getpwuid($>) . "/cache";
my $TEMPLATE = <<EOD;
<!DOCTYPE html>
<html>
<head>
<title>%TITLE%</title>
<meta name="Created" content="%DATE%" />
<meta name="Author" content="%AUTHOR%" />
<meta name="Copyright" content="%COPYRIGHT%" />
<meta name="summary" content="%SUMMARY%" />
<meta name="keywords" content="%KEYWORDS%" />
<meta name="revision" content="%REVISION%" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<style type='text/css'>
\@page {
size: %PAGE_SIZE% %ORIENTATION% ;
margin: 90pt 30pt 40pt 30pt ;
\@top {
margin: -10pt 0pt 0pt -90pt ;
}
\@bottom-right { content: counter(page) ;}
} }
body {font-style: sans-serif;}
/* toc */
#toc {
padding: 0.4em;
page-break-after: always;
}
#toc p {
font-weight: bold;
font-size: 32;
}
#toc h3 {
text-align: center
}
#toc ul {
columns: 1;
}
#toc ul, #toc li {
list-style: none;
margin: 0;
padding: 0;
padding-left: 10px ;
}
#toc a::after {
content: leader('.') target-counter(attr(href), page);
font-style: normal;
}
#toc a {
text-decoration: none ;
color: black;
}
/* tables*/
table { page-break-inside: avoid ;}
table.footer { font-size: 10px; width: 100%;}
table.footer td.commercial {
font-weight: bold;
font-size: 12px;
text-align: center;
}
/* nice markup for source code */
table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {
margin: 0; padding: 0; vertical-align: baseline; border: none;
}
table.sourceCode { width: 100%; line-height: 100%; }
td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }
td.sourceCode { padding-left: 5px; }
code > span.kw { color: #007020; font-weight: bold; }
code > span.dt { color: #902000; }
code > span.dv { color: #40a070; }
code > span.bn { color: #40a070; }
code > span.fl { color: #40a070; }
code > span.ch { color: #4070a0; }
code > span.st { color: #4070a0; }
code > span.co { color: #60a0b0; font-style: italic; }
code > span.ot { color: #007020; }
code > span.al { color: #ff0000; font-weight: bold; }
code > span.fu { color: #06287e; }
code > span.er { color: #ff0000; font-weight: bold; }
</style>
</head>
<body>
<h1>%TITLE%</h1>
<!-- uncomment this if you need a Table of Contents -->
<!-- <div id='toc' >
%TOC%
</div> -->
%_CONTENTS_%
<table class='footer' width='100%'>
<tr><td>(c) %COPYRIGHT%</td><td align='right'>%DATE%</td>
</table>
</body>
</html>
EOD
# -----------------------------------------------------------------------------
sub other_debug {
my ( $state, $debug ) = @_;
# return if ( $state ne 'DEBUG' );
my $msg = $state;
$msg .= " $debug" if ($debug);
say STDERR localtime() . " " . get_program() . " $msg";
}
# -----------------------------------------------------------------------------
sub create_defaults {
my ( $dir, $verbose ) = @_;
my $default = "$dir/templates/default";
my ( $r, $o, $e );
die "dir option required" if ( !$dir );
if ( !-d $default ) {
# create the defaults if they do not exist
try { path($default)->mkpath } catch {};
msg_exit("Could not create default templates dir in $dir") if ( !-d $default );
}
# create HTML template
path("$default/template.html")->spew_utf8($TEMPLATE) if ( !-f "$default/template.html" );
my $config = App::Basis::Config->new( filename => "$default/config" );
# if there is no data in the config then lets create some
if ( !$config->has_data() ) {
$config->set( '/page/size', 'A4' );
$config->set( '/page/orientation', 'Portrait' );
my $author = getpwuid($>);
$config->set( '/author', $author );
$config->set( '/copyright', "Property of $author 2014" );
( run in 0.464 second using v1.01-cache-2.11-cpan-5735350b133 )