#!/usr/bin/env perl # creates YAML .cfg file for use with web_page_from_db.pl # list of images in format: # eg: IMG_0100, IMG_0101,IMG_0110..0113, IMG_0119 or a folder name containing images use v5.26; # say use autodie; use strict; use warnings; # using system perl & local-lib - see web_page_from_db.pl use lib '/home/raj/perl5/lib/perl5'; # no longer in PERL5LIB due to plenv use List::Util qw(first); use Data::Printer use_prototypes => 0; use IO::YAML; use IO::All; use vars qw($path $imgs $dir $tags $h2 $h4 $skip_imgs $skip_carousel); # STDIN vars: { # get vars from stdin: print "enter path to index.html under ~/scripts/exifdata/folio/: "; chomp ( $path = ); print "\nenter level 2 heading: "; chomp ( $h2 = ); print "\nenter level 4 heading: "; chomp ( $h4 = ); print "\nenter list of jpgs (eg IMG_0100, IMG_0110..0120) or leave blank for dir:\n"; chomp ( $imgs = ); if (! $imgs ) { print "\npath to images folder under /mnt/nas_images:\n"; chomp ( $dir = ); # warn $dir; die "$dir doesn't exist" unless -e "/mnt/nas_images/$dir"; print "\nenter list of jpgs to skip (eg IMG_0100, IMG_0110..0120)\n"; chomp ( $skip_imgs = ); } print "\nadditional tag groups [focus]:\n"; chomp ( $tags = ); print "\nskip carousel [0|1]?:\n"; chomp ( $skip_carousel = ); # p [$path, $imgs, $dir, $tags, $h2, $h4, $skip_carousel]; } # full path to new dir: my $full_path = "/home/raj/scripts/exifdata/folio/${path}"; my $re = '(.*)\s?\.\.\s?(.*)'; # convert eg IMG_099, IMG_0100 .. IMG_0110 -> IMG_099, IMG_100, IMG_101, etc my @images = expand_image_list($imgs); my @skip_imgs = expand_image_list($skip_imgs); # p \@skip_images; # create dir: unless (-e $full_path) { say "creating $full_path"; io($full_path)->mkpath; } { # create YAML file: my $cfg = "$full_path/.cfg"; # warn $cfg; my $h = { h2 => $h2, h3 => undef, h4 => $h4, }; # add list of images or folder name: if ( @images ) { $h->{img} = [ map $_.'.JPG', @images ]; } elsif ($dir) { $h->{dir} = $dir; if ( @skip_imgs ) { $h->{skip_img} = [ map $_.'.JPG', @skip_imgs ]; } } # p $h; if ( $tags ) { my %t = map { $_ => 1 } split /[\,\s]+/, $tags; $h->{tag_group} = \%t; } $h->{skip_carousel} = ($skip_carousel); # 1 or 0 my $io = IO::YAML->new; $io->open('>'.$cfg) or die "Couldn't open $cfg - $!"; print $io $h; say "created new .cfg in $full_path"; } sub expand_image_list { my $imgs = shift || return; # p $imgs; my @items = split /[\,\s]+/, $imgs; # p \@items; for my $i(@items) { if ( $i =~ /$re/ ) { # eg IMG_0100 .. IMG_0110 my ($a,$b) = ($1,$2); # p [$a, $b]; my ($begin_str) = $a =~ /(\D+)/; my ($begin_num) = $a =~ /(\d+)/; my ($end_num) = $b =~ /(\d+)/; # p [$begin_str, $begin_num, $end_num]; # replace element containing '..' with new list: my $index = first { $items[$_] eq $i } 0..$#items; # warn $index; my @new = ( $begin_num .. $end_num ); # p \@new; splice(@items, $index, 1, map $begin_str . $_, @new); } } # p \@items; return @items; }