why did I do this

This commit is contained in:
random 2025-01-19 12:16:01 -05:00
parent 551a80abbe
commit fa2870c4b3

187
staticgen.pl Normal file → Executable file
View file

@ -1,92 +1,133 @@
#!/usr/bin/env perl #!/usr/bin/perl
use strict; use strict;
use warnings; use warnings;
use Carp;
#use HTML::Template; #use HTML::Template;
$SIG{__WARN__} = sub { die @_; }; $SIG{__WARN__} = sub { die @_; };
sub DisplayUsage
=begin comment
HOW THE ARGUMENTS ARE PROBABLY GONNA LOOK:
--new-post
--build=(all|modified)
--publish
[...]
TODO:
[ ] everything
=end comment
=cut
my $HELP_TEXT = << "END_HELP_TEXT";
Usage: staticgen.pl [options]
Put the stuff here when arguments are actually implemented.
END_HELP_TEXT
sub LoadConfig
{ {
my $filename = shift; my $options_ref = shift;
open my $cfh, "<$filename" or die "Couldn't open file!"; my @options = @$options_ref;
while (!eof($cfh)) print "Usage:\n";
for my $opt (@options)
{ {
my $l = <$cfh>; my $opt_str = " " . (defined $opt->{sopt} ? "-$opt->{sopt}, " : " ");
# ^_^ $opt_str .= (defined $opt->{lopt} ? "--$opt->{lopt}" : "");
if (lc $opt->{arg} eq "required")
{
$opt_str .= "=<value>";
}
elsif (lc $opt->{arg} eq "optional")
{
$opt_str .= "[=<value>]";
}
print $opt_str . "\n " . ($opt->{desc} // "") . "\n\n";
} }
close $cfh; exit 0;
} }
sub HandleArgs
{
my ($args_ref, $options_ref) = @_;
my @args = @$args_ref;
my @options = @$options_ref;
for my $arg (@args)
{
if ($arg =~ m@^(-(?<sopts>\w{2,})|-(?<sopt>\w)|-+(?<lopt>[\w-]+))(=(?<optarg>.+))?\z@i)
{
my @soptlist;
@soptlist = split //, $+{sopts} if defined $+{sopts};
my $optarg;
my $handled = 1;
DisplayUsage($options_ref)
if ((defined $+{sopt} and $+{sopt} eq "h") or
(defined $+{lopt} and $+{lopt} eq "help"));
for my $opt (@options)
{
die "No option name to handle!"
unless defined $opt->{lopt} or defined $opt->{sopt};
if (defined $opt->{sopt})
{
if (grep { $_ eq $opt->{sopt} } @soptlist)
{
die "Option -$opt->{sopt} cannot be in a list as it requires an argument!\n"
if $opt->{arg} eq "required";
$opt->{handler}();
}
elsif (defined $+{sopt} and $+{sopt} // "" eq $opt->{sopt})
{
$optarg = $+{optarg} // ();
$opt->{handler}($optarg);
}
}
if (defined $opt->{lopt} and $+{lopt} // "" eq $opt->{lopt})
{
$optarg = $+{optarg} // ();
$opt->{handler}($optarg);
}
}
die "Unrecognized option: $arg\n"
unless $handled;
}
}
}
sub HandleConf
{
my $filename = shift;
print "Loading configuration from: $filename\n";
}
my @optArray = (
{
lopt => "config",
sopt => "c",
desc => "Loads a custom config file at a specified path.",
arg => "required",
handler => \&HandleConf
},
{
lopt => "new-post",
sopt => "n",
desc => "Create a new post.",
arg => "none",
handler => sub { print "do something\n"; }
},
{
lopt => "build",
sopt => "b",
desc => "Build all posts and templates into HTML.",
arg => "optional",
handler => sub { print "do something\n"; }
},
{
lopt => "publish",
sopt => "p",
desc => "Publish built files.",
arg => "none",
handler => sub { print "do something\n"; }
},
);
sub Main sub Main
{ {
for my $arg (@ARGV) HandleArgs(\@ARGV, \@optArray);
{
if ($arg =~ m@^(-n|-+new-post)\z@i)
{
# something
next;
}
if ($arg =~ m@^(-b|-+build)(=(?<bopt>.+))?\z@i)
{
if (defined $+{bopt})
{
if (lc $+{bopt} eq "all") { next; }
elsif (lc $+{bopt} eq "modified") { next; }
else { die "Invalid option for --build!"; }
}
else
{
next;
}
}
if ($arg =~ m@^-+config=(?<conf>.+)\z@i)
{
die "Specified config file doesn't exist!"
unless -f $+{conf};
LoadConfig($+{conf});
next;
}
if ($arg =~ m@^(-p|-+publish)\z@i)
{
# something
next;
}
die $HELP_TEXT if ($arg =~ m@^(-h|-+help)\z@i);
}
} }
&Main(); &Main();