App-Basis-ConvertText2

 view release on metacpan or  search on metacpan

bin/ct2  view on Meta::CPAN

                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" );
        $config->store();
    }
}

# -----------------------------------------------------------------------------

sub read_settings {
    my ( $template, $dir ) = @_;
    my %settings;

    die "dir option required" if ( !$dir );

    $template ||= 'default';
    $template =~ s/\v//g;
    my $templatedir = "$dir/templates/$template";
    if ( !-d $templatedir ) {
        debug( "INFO", "Template '$template' does not exist, using default" );
        $templatedir = "$dir/templates/default";
    }
    $settings{config} = App::Basis::Config->new( filename => "$templatedir/config" );

    $settings{template}     = $template;
    $settings{template_dir} = $templatedir;
    $settings{template}     = path("$templatedir/template.html")->slurp_utf8;

    return \%settings;
}

# -----------------------------------------------------------------------------
# main

bin/ct2  view on Meta::CPAN


# get any template from the stop of the story
my $settings;
my ($template) = ( $story =~ /^template:\s?(.*?)$/sm );

# document template overwritten by the command line option
$template = $opt{template} if ( $opt{template} );
$settings = read_settings( $template, $opt{config_dir} );

# add in template defaults if needed
$replace->{DATE} ||= strftime( "%Y-%m-%d", gmtime() );
$replace->{COPYRIGHT}   ||= $settings->{config}->get("copyright");
$replace->{AUTHOR}      ||= $settings->{config}->get("author");
$replace->{PAGE_SIZE}   ||= $settings->{config}->get("page/size");
$replace->{ORIENTATION} ||= $settings->{config}->get("page/orientation");

my $format = App::Basis::ConvertText2->new(
    name      => get_program(),
    basedir   => $basedir,
    use_cache => 1,
    cache_dir => $CACHE_DIR,
    template  => $settings->{template},
    replace   => $replace,
    verbose   => $opt{verbose},
    embed     => $opt{embed},
);
$format->clean_cache() if ( $opt{clean} );

# be in the same dir as the input file in case there are an files in plugins
# that act on relative paths
my $current = Path::Tiny->cwd;
chdir($basedir);

my $data = $format->parse($story);

# decide on output filename from any format keyword
# all the keywords are in UPPER-CASE
my $keywords = $format->replace;
if ( !$opt{output} && $keywords->{FORMAT} ) {

    # same name as input
    $opt{output} = $opt{filename};

    # change extension
    $opt{output} =~ s/\.md$/.$keywords->{FORMAT}/i;
}

if ( $opt{output} ) {
    my $pdfconvertor;

    if ( $opt{prince} ) {
        $pdfconvertor = 'prince';
    }
    elsif ($opt{wkhtmltopdf})  {
        $pdfconvertor = 'wkhtmltopdf';
    }

    my $status = $format->save_to_file( $opt{output}, $pdfconvertor);

    if ( $opt{verbose} && $status ) {
        say "Created $opt{output}";
    }
    elsif ( !$status ) {
        say "Failed to create $opt{output}";
    }
}
else {
    say STDERR "Ignoring $opt{filename}, could not determine a filename to output to, no :format option in file?" if ( $opt{verbose} );
}

# return to where we came from
chdir($current);



( run in 0.479 second using v1.01-cache-2.11-cpan-d7a12ab2c7f )