App-Basis-ConvertText2

 view release on metacpan or  search on metacpan

bin/ct2  view on Meta::CPAN

    [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 )