--- a/genorg.pl Wed Dec 18 00:58:13 2024 +1000
+++ b/genorg.pl Wed Dec 18 02:18:43 2024 +1000
@@ -37,34 +37,24 @@
my $domain = "p.bauherren.ovh";
my $max_rss = 30;
# The first page has one less article. Think of it as a feature.
-my $max_cat = 10;
+my $max_cat = 30;
my $blog_title = "Pranshu's blog";
my ($home, $about) = ("home.html", "about.html");
my $etc_files;
my $nav_id = "nav";
+my $rdesc = "description";
my $username = $ENV{LOGNAME} || $ENV{USER} || getpwuid ($<);
my $template = <<"END";
#+title: Test document
#+subtitle: This is the subtitle
+#+date: IMPORANT
#+author: $username
-#+keywords: tag thing | related
+#+keywords: tag->thing | rel->a
#+options: html-link-use-abs-url:nil html-postamble:auto
#+options: html-preamble:t html-scripts:nil html-style:t
#+options: html5-fancy:nil tex:t
-#+options: tex:mathjax
#+html_doctype: html5
-#+html_container: div
-#+html_content_class: content
-#+html_link_home:
-#+html_link_up:
-#+html_mathjax:
-#+html_equation_reference_format: \eqref{%s}
-#+html_head:
-#+html_head_extra:
-#+infojs_opt:
-#+creator: <a href="https://www.gnu.org/software/emacs/">Emacs</a> 31.0.50 (<a href="https://orgmode.org">Org</a> mode 9.7.11)
-#+latex_header:
END
my $req_config = <<"END";
@@ -153,7 +143,8 @@
VAR VALUE
where VAR can be:
emacs-path : The value should be path of emacs. 'emacs' by default.
- css : The path of the css file to use.
+ acss : The path of the css file to use for articles.
+ ccss : Path of css to use for cataogry pages.
in_dir : The directory that contains the files.
out_dir : the output directory.
no_name_dir: The directory for generate files. This means in_dir/no_name_dir
@@ -164,6 +155,8 @@
about : about file
domain : domain (for rss)
title : title of the blog
+ max_rss : max_rss entries
+ max_cat : max catagory entries before next page
As soon as config file comes accross '>>---', the rest of the file
is now the elisp code used in emacs startup.
@@ -174,15 +167,16 @@
<?xml version=\"1.0\" encoding=\"UTF-8\" ?>
<rss version=\"2.0\">
<channel>
- <title>W3Schools Home Page</title>
- <link>https://www.w3schools.com</link>
- <description>Free web building tutorials</description>"
+ <title>TITLE</title>
+ <link>BLINK</link>
+ <description>RDESC</description>"
END
my %config_vars =
(
'emacs-path' => \$emacs,
- css => \$art_css,
+ acss => \$art_css,
+ ccss => \$cat_css,
indir => \$dir,
outdir => \$outdir,
no_name_dir => \$no_name_dir,
@@ -191,7 +185,10 @@
home => \$home,
about => \$about,
domain => \$domain,
- title => \&blog_title
+ title => \$blog_title,
+ rdesc => \$rdesc,
+ max_rss => \$max_rss,
+ max_cat => \$max_cat
);
@@ -206,10 +203,10 @@
}
chomp;
my ($directive, $rest) = split /\s+/, $_, 2;
- if (exists($config_vars{$directive})) {
+ if (exists $config_vars{$directive}) {
${$config_vars{$directive}} = $rest;
} else {
- print "Unknown variable $directive\n";
+ die "Unknown variable $directive\n";
}
}
close $fh;
@@ -221,7 +218,7 @@
}
sub template ($file) {
- $file // die "-t needs an argument.\n";
+ $file // do {print $template; exit(1)};
$file =~ s/\.org$//;
open my $fh, '>', $file . ".org" or die $file . " couldn't be opened\n";
print $fh $template;
@@ -230,7 +227,7 @@
# Reletive file from the perspect of file1, to file2
sub prel_path ($from, $to) {
- return $to =~ s/^.//r if $from eq $to;
+ return $to if $from eq $to;
my \(@f1, @f2) = map [m{/[^/]+}g], ($from, $to);
# return substr($f1[$#f1], 1) if $from =~ $to;
while (@f1 && @f2 && $f1[0] =~ $f2[0]) {
@@ -304,35 +301,35 @@
my $cache_dom;
sub main {
- s!/*$!/! for ($outdir, $dir);
- -d $cdir or help_and_bye;
- mkdir $outdir;
- chdir $cdir or die "Couldn't access $cdir\n";
- read_config $config_file;
- my @navify_files = map {"$dir$_"} ($about, $home, $etc_files ? split(/[ \t]+/, $etc_files) : ());
- -d $dir or die "$dir doesn't exist \n";
- find (\&wanted, $dir);
- for my $f (@files_to_move) {
- my $dest = $f =~ s#$dir/?#$outdir#er;
- if (grep(m#^$f$#, @navify_files)) {
- # YAY we have to sub navbar and copy whoop whoop
- open my $file_tc, '<', $f or die "file no open, grrr!";
- open my $file_out, '>', $dest;
- local $/;
- print $file_out ((<$file_tc>) =~ s/NAV/nav_up("$dest" =~ s%.+?\/%%r,1)/er);
- map \&close, ($file_tc, $file_out);
- } else {
- copy $f, $dest;
- }
+ -d $cdir or help_and_bye;
+ mkdir $outdir;
+ chdir $cdir or die "Couldn't access $cdir\n";
+ read_config $config_file;
+ s!/*$!/! for ($outdir, $dir);
+ my @navify_files = map {"$dir$_"} ($about, $home, $etc_files ? split(/[ \t]+/, $etc_files) : ());
+ -d $dir or die "$dir doesn't exist \n";
+ find (\&wanted, $dir);
+ for my $f (@files_to_move) {
+ my $dest = $f =~ s#$dir/?#$outdir#er;
+ if (grep(m#^$f$#, @navify_files)) {
+ # YAY we have to sub navbar and copy whoop whoop
+ open my $file_tc, '<', $f or die "file no open, grrr!";
+ open my $file_out, '>', $dest;
+ local $/;
+ print $file_out ((<$file_tc>) =~ s/NAV/nav_up("$dest" =~ s%.+?\/%%r,1)/er);
+ map \&close, ($file_tc, $file_out);
+ } else {
+ copy $f, $dest;
}
- mkdir for @files_to_make;
- values %{conv_files()};
- $cache_dom = XML::LibXML->load_xml(location => $cache_file) if $cache && -f $cache_file;
- chdir $outdir;
- @arts = sort { $b->{date} <=> $a->{date}} map { html_fixup($_) } @org_exps;
- finalise_html();
- chdir '..';
- populate_cache();
+ }
+ mkdir for @files_to_make;
+ values %{conv_files()};
+ $cache_dom = XML::LibXML->load_xml(location => $cache_file) if $cache && -f $cache_file;
+ chdir $outdir;
+ @arts = sort { $b->{date} <=> $a->{date}} map { html_fixup($_) } @org_exps;
+ finalise_html();
+ chdir '..';
+ populate_cache();
}
sub populate_cache {
@@ -460,14 +457,14 @@
sub nav_up {
my ($path) = @_;
my @links = ($home, 'c/1.html', $about);
- my $nav = shift ? $navbar : "<div class\"$nav_id\">$navbar</div>";
+ my $nav = shift ? "<div class=\"$nav_id\">$navbar</div>" : $navbar;
$nav =~ s#LINK#prel_path("/$path", "/". shift @links)#ger;
}
sub cssbs($s,$t,$p){
$s =~ s|CSS|prel_path("/$p","/$cat_css")|er
=~ s/TITLE|BTIT/$t/ger
- =~ s/NAV/nav_up($p)/er;
+ =~ s/NAV/nav_up($p,1)/er;
}
sub modify_art ($file, $dom) {
@@ -478,7 +475,7 @@
for ($dom->findnodes('/html/body')) {
# my @cds = $_->childNodes;
my $nav_el = $dom->createElement('div');
- $nav_el->{id} = $nav_id;
+ $nav_el->{class} = $nav_id;
$nav_el->appendWellBalancedChunk(nav_up($file));
$_->insertBefore($nav_el, $_->childNodes->[0])
}
@@ -491,11 +488,18 @@
$dom;
}
+sub rss_st {
+ $rss_entry
+ =~ s/TITLE/$blog_title/er
+ =~ s/BLINK/$domain/er
+ =~ s/RDESC/$rdesc/er;
+}
+
sub finalise_html {
mkdir $no_name_dir;
open my $fh, '>', "$no_name_dir/1.html";
open my $mrss, '>', "$no_name_dir/rss.xml"; # The master rss file
- print $mrss $rss_entry;
+ print $mrss rss_st();
print $fh cssbs($h_intro . $h_c_intro, $blog_title, "a/c");
my (%c_files, %r_files); # Cataogry files and rss
@@ -508,7 +512,7 @@
mkdir "$no_name_dir/$cat";
open $c_files{$cat}, '>', "$no_name_dir/$cat/1.html";
open $r_files{$cat}, '>', "$no_name_dir/$cat/rss.xml";
- print {$r_files{$cat}} $rss_entry;
+ print {$r_files{$cat}} rss_st();
print {$c_files{$cat}}
cssbs($h_intro, "$cat <a id=\"rss\" href=\"rss.xml\">(rss)</span> ", "a/b/c");
}