#!/usr/bin/perl use warnings; use strict; use Getopt::Std; use File::Basename; use Cwd; use File::Copy; use File::Slurp qw/read_file write_file/; use YAML::Syck; $YAML::Syck::ImplicitUnicode = 1; our ($opt_r, $opt_u); getopt('ur'); my $root = $opt_r //= '/home/natura/mex/public/users'; my $user = $opt_u //= $ENV{'USER'}; my $target_dir = "$root/$user"; unless (-e $target_dir) { die "couldn't find target dir: $target_dir\n"; } foreach my $n (0 .. $#ARGV) { my $file = $ARGV[$n]; next unless -e $file; print "Processing $file.. \n"; __proc_file($file); print "ok!\n"; } sub __proc_file { my $file = shift; my $filename = basename $file; my $cwd = cwd(); chdir $target_dir; copy($file, '.'); `/usr/local/bin/mex2tex -pdf2 -dm $filename 2>&1`; `/usr/local/bin/tth -a -u -r < $filename.tex `; __build_meta($file); chdir $cwd; } sub __build_meta { my $file = shift; my $filename = basename $file; my $metafile = "$filename.META"; my $data = {}; # XXX my $source = read_file( $file, { binmode => ':utf8' });; $data->{title} = $filename; if ($source =~ m/#\s*title\s*: (.*?)\n/i) { $data->{title} = $1; } $data->{author} = 'no author set'; if ($source =~ m/#\s*author\s*: (.*?)\n/i) { $data->{author} = $1; } $data->{uploaded} = `date`; $data->{filename} = $filename; my $yaml = Dump($data); write_file($metafile, {binmode => ':utf8'}, $yaml); }