Luc Didry 960163
# vim:set sw=4 ts=4 sts=4 ft=perl expandtab:
Luc Didry 960163
package Lufi::Command::theme;
Luc Didry 960163
use Mojo::Base 'Mojolicious::Commands';
Luc Didry 960163
use FindBin qw($Bin);
Luc Didry 960163
use File::Spec qw(catfile cat dir);
Luc Didry 960163
use File::Path qw(make_path);
Luc Didry 960163
Luc Didry 960163
has description => 'Create new theme skeleton.';
Luc Didry 960163
has usage => sub { shift->extract_usage };
Luc Didry 960163
has message    => sub { shift->extract_usage . "\nCreate new theme skeleton:\n" };
Luc Didry 960163
has namespaces => sub { ['Lufi::Command::theme'] };
Luc Didry 960163
Luc Didry 960163
sub run {
Luc Didry 960163
    my $c    = shift;
Luc Didry 960163
    my $name = shift;
Luc Didry 960163
Luc Didry 960163
    unless (defined $name) {
Luc Didry 960163
        say $c->extract_usage;
Luc Didry 960163
        exit 1;
Luc Didry 960163
    }
Luc Didry 960163
Luc Didry 960163
    my $home = File::Spec->catdir($Bin, '..', 'themes', $name);
Luc Didry 960163
Luc Didry 960163
    unless (-d $home) {
Luc Didry 960163
Luc Didry 960163
        # Create skeleton
Luc Didry 960163
        mkdir $home;
Luc Didry 960163
        mkdir File::Spec->catdir($home, 'public');
Luc Didry 960163
        make_path(File::Spec->catdir($home, 'templates', 'layouts'));
Luc Didry 960163
        make_path(File::Spec->catdir($home, 'lib', 'Lufi', 'I18N'));
Luc Didry 960163
Luc Didry 960163
        my $i18n = <
Luc Didry 960163
# vim:set sw=4 ts=4 sts=4 ft=perl expandtab:
Luc Didry 960163
package Lufi::I18N;
Luc Didry 960163
Luc Didry 960163
use base 'Locale::Maketext';
Luc Didry 960163
use File::Basename qw/dirname/;
Luc Didry 960163
use Locale::Maketext::Lexicon {
Luc Didry 960163
    _auto => 1,
Luc Didry 960163
    _decode => 1,
Luc Didry 960163
    _style  => 'gettext',
Luc Didry 960163
    '*' => [
Luc Didry 960163
        Gettext => dirname(__FILE__) . '/I18N/*.po',
Luc Didry 960163
        Gettext => dirname(__FILE__) . '/../../../default/lib/Lufi/I18N/*.po',
Luc Didry 960163
    ]
Luc Didry 960163
};
Luc Didry 960163
Luc Didry 960163
1;
Luc Didry 960163
EOF
Luc Didry 960163
Luc Didry 960163
        open my $f, '>', File::Spec->catfile($home, 'lib', 'Lufi', 'I18N.pm') or die "Unable to open $home/lib/Lufi/I18N.pm: $!";
Luc Didry 960163
        print $f $i18n;
Luc Didry 960163
        close $f;
Luc Didry 960163
Luc Didry 960163
        my $makefile = <
Luc Didry 960163
EN=lib/Lufi/I18N/en.po
Luc Didry 960163
FR=lib/Lufi/I18N/fr.po
Luc Didry 378c66
IT=lib/Lufi/I18N/it.po
Luc Didry 9d5bb7
OC=lib/Lufi/I18N/oc.po
Luc Didry 960163
SEDOPTS=-e "s\@SOME DESCRIPTIVE TITLE\@Lufi language file\@" \\
Luc Didry 960163
		-e "s\@YEAR THE PACKAGE'S COPYRIGHT HOLDER\@2015 Luc Didry\@" \\
Luc Didry 960163
		-e "s\@CHARSET\@utf8\@" \\
Luc Didry 960163
		-e "s\@the PACKAGE package\@the Lufi package\@" \\
Luc Didry 960163
		-e '/^\\#\\. (/{N;/\\n\\#\\. (/{N;/\\n.*\\.\\.\\/default\\//{s/\\#\\..*\\n.*\\#\\./\\#. (/g}}}' \\
Luc Didry 5754ac
		-e '/^\\#\\. (/{N;/\\n.*\\.\\.\\/default\\//{s/\\n/ /}}'
Luc Didry 960163
SEDOPTS2=-e '/^\\#.*\\.\\.\\/default\\//,+3d'
Luc Didry 960163
XGETTEXT=carton exec ../../local/bin/xgettext.pl
Luc Didry 960163
CARTON=carton exec
Luc Didry 960163
Luc Didry 960163
locales:
Luc Didry 960163
		\$(XGETTEXT) -D templates -D ../default/templates -o \$(EN) 2>/dev/null
Luc Didry 960163
		\$(XGETTEXT) -D templates -D ../default/templates -o \$(FR) 2>/dev/null
Luc Didry 378c66
		\$(XGETTEXT) -D templates -D ../default/templates -o \$(IT) 2>/dev/null
Luc Didry 9d5bb7
		\$(XGETTEXT) -D templates -D ../default/templates -o \$(OC) 2>/dev/null
Luc Didry 960163
		sed \$(SEDOPTS) -i \$(EN)
Luc Didry 960163
		sed \$(SEDOPTS2) -i \$(EN)
Luc Didry 960163
		sed \$(SEDOPTS) -i \$(FR)
Luc Didry 960163
		sed \$(SEDOPTS2) -i \$(FR)
Luc Didry 378c66
		sed \$(SEDOPTS) -i \$(IT)
Luc Didry 378c66
		sed \$(SEDOPTS2) -i \$(IT)
Luc Didry 9d5bb7
		sed \$(SEDOPTS) -i \$(OC)
Luc Didry 9d5bb7
		sed \$(SEDOPTS2) -i \$(OC)
Luc Didry 960163
EOF
Luc Didry 960163
Luc Didry 960163
        open $f, '>', File::Spec->catfile($home, 'Makefile') or die "Unable to open $home/Makefile: $!";
Luc Didry 960163
        print $f $makefile;
Luc Didry 960163
        close $f;
Luc Didry 960163
    } else {
Luc Didry 960163
        say "$name theme already exists. Aborting.";
Luc Didry 960163
        exit 1;
Luc Didry 960163
    }
Luc Didry 960163
}
Luc Didry 960163
Luc Didry 960163
=encoding utf8
Luc Didry 960163
Luc Didry 960163
=head1 NAME
Luc Didry 960163
Luc Didry 960163
Lufi::Command::theme - Create new theme skeleton.
Luc Didry 960163
Luc Didry 960163
=head1 SYNOPSIS
Luc Didry 960163
Luc Didry 960163
  Usage: script/lufi theme THEME_NAME
Luc Didry 960163
Luc Didry 960163
  Your new theme will be available in the themes directory.
Luc Didry 960163
=cut
Luc Didry 960163
Luc Didry 960163
1;