From d6ca1b3fd9a34dcf829ed60c40848ecb88179a25 Mon Sep 17 00:00:00 2001 From: Jaimos Skriletz Date: Sat, 23 Nov 2024 22:06:40 -0700 Subject: [PATCH] Don't limit macros to predefined lists. To keep from having to update the list each time a macro directory is added/removed/changed, just sort the macros by their directory alphabetically. There is still a hash of macro names to allow both translated or custom names instead of using the directory as its name, but any directory that isn't in the list will also be included without updating the list. --- bin/dev_scripts/PODtoHTML.pm | 33 ++++++++++--------- bin/dev_scripts/generate-ww-pg-pod.pl | 25 ++------------ .../pod-templates/category-index.mt | 7 ++-- templates/ContentGenerator/PODViewer.html.ep | 4 +-- 4 files changed, 24 insertions(+), 45 deletions(-) diff --git a/bin/dev_scripts/PODtoHTML.pm b/bin/dev_scripts/PODtoHTML.pm index 87ee1dc616..c967731a0a 100644 --- a/bin/dev_scripts/PODtoHTML.pm +++ b/bin/dev_scripts/PODtoHTML.pm @@ -31,11 +31,21 @@ use POSIX qw(strftime); use WeBWorK::Utils::PODParser; our @sections = ( - bin => 'Scripts', - conf => 'Config Files', doc => 'Documentation', + bin => 'Scripts', + macros => 'Macros', lib => 'Libraries', - macros => 'Macros' +); +our %macro_names = ( + answers => 'Answers', + contexts => 'Contexts', + core => 'Core', + deprecated => 'Deprecated', + graph => 'Graph', + math => 'Math', + misc => 'Miscellaneous', + parsers => 'Parsers', + ui => 'User Interface' ); sub new { @@ -43,21 +53,16 @@ sub new { my $class = ref $invocant || $invocant; my @section_list = ref($o{sections}) eq 'ARRAY' ? @{ $o{sections} } : @sections; - my @macros_list = ref($o{macros}) eq 'ARRAY' ? @{ $o{macros} } : (); my $section_hash = {@section_list}; - my $macros_hash = {@macros_list}; my $section_order = [ map { $section_list[ 2 * $_ ] } 0 .. $#section_list / 2 ]; - my $macros_order = @macros_list ? [ map { $macros_list[ 2 * $_ ] } 0 .. $#macros_list / 2 ] : []; delete $o{sections}; - delete $o{macros}; my $self = { %o, idx => {}, section_hash => $section_hash, section_order => $section_order, - macros_hash => $macros_hash, - macros_order => $macros_order, + macros_hash => {}, }; return bless $self, $class; } @@ -140,12 +145,7 @@ sub update_index { if ($subdir eq 'macros') { $idx->{macros} = []; if ($pod_name =~ m!^(.+)/(.+)$!) { - my $macros = $self->{macros_hash}; - if ($macros->{$1}) { - push @{ $idx->{$1} }, [ $html_rel_path, $2 ]; - } else { - warn "no macro for '$pod_name'\n"; - } + push @{ $self->{macros_hash}{$1} }, [ $html_rel_path, $2 ]; } else { push @{ $idx->{doc} }, [ $html_rel_path, $pod_name ]; } @@ -171,7 +171,8 @@ sub write_index { sections => $self->{section_hash}, section_order => $self->{section_order}, macros => $self->{macros_hash}, - macros_order => $self->{macros_order}, + macros_order => [ sort keys %{ $self->{macros_hash} } ], + macro_names => \%macro_names, date => strftime('%a %b %e %H:%M:%S %Z %Y', localtime) } ); diff --git a/bin/dev_scripts/generate-ww-pg-pod.pl b/bin/dev_scripts/generate-ww-pg-pod.pl index 3f6216aa46..b0e6e06d99 100755 --- a/bin/dev_scripts/generate-ww-pg-pod.pl +++ b/bin/dev_scripts/generate-ww-pg-pod.pl @@ -96,39 +96,18 @@ sub process_dir { my $source_dir = shift; return unless $source_dir =~ /\/webwork2$/ || $source_dir =~ /\/pg$/; - my $is_pg = $source_dir =~ /\/pg$/; my $dest_dir = $source_dir; - $dest_dir =~ s/^$webwork_root/$output_dir\/webwork2/ unless $is_pg; - $dest_dir =~ s/^$pg_root/$output_dir\/pg/ if $is_pg; + $dest_dir =~ s/^$webwork_root/$output_dir\/webwork2/ if ($source_dir =~ /\/webwork2$/); + $dest_dir =~ s/^$pg_root/$output_dir\/pg/ if ($source_dir =~ /\/pg$/); remove_tree($dest_dir); make_path($dest_dir); - my $sections = - $is_pg - ? [ doc => 'Documentation', bin => 'Scripts', macros => 'Macros', lib => 'Libraries' ] - : [ bin => 'Scripts', doc => 'Documentation', lib => 'Libraries' ]; - my $macros = $is_pg - ? [ - core => 'Core', - contexts => 'Contexts', - parsers => 'Parsers', - answers => 'Answers', - graph => 'Graph', - math => 'Math', - ui => 'User Interface', - misc => 'Miscellaneous', - deprecated => 'Deprecated' - ] - : []; - my $htmldocs = PODtoHTML->new( source_root => $source_dir, dest_root => $dest_dir, template_dir => "$webwork_root/bin/dev_scripts/pod-templates", dest_url => $base_url, - sections => $sections, - macros => $macros, verbose => $verbose ); $htmldocs->convert_pods; diff --git a/bin/dev_scripts/pod-templates/category-index.mt b/bin/dev_scripts/pod-templates/category-index.mt index 96895c9117..a5d980d599 100644 --- a/bin/dev_scripts/pod-templates/category-index.mt +++ b/bin/dev_scripts/pod-templates/category-index.mt @@ -25,15 +25,14 @@ % % my ($index, $macro_index, $content, $macro_content) = ('', '', '', ''); % for my $macro (@$macros_order) { - % next unless defined $pod_index->{$macro}; % my $new_index = begin - <%= $macros->{$macro} %> + <%= $macro_names->{$macro} // $macro %> % end % $macro_index .= $new_index->(); % my $new_content = begin -

<%= $macros->{$macro} %>

+

<%= $macro_names->{$macro} // $macro %>

- % for my $file (sort { $a->[1] cmp $b->[1] } @{ $pod_index->{$macro} }) { + % for my $file (sort { $a->[1] cmp $b->[1] } @{ $macros->{$macro} }) { <%= $file->[1] %> % }
diff --git a/templates/ContentGenerator/PODViewer.html.ep b/templates/ContentGenerator/PODViewer.html.ep index 416486dc49..1383095d5f 100644 --- a/templates/ContentGenerator/PODViewer.html.ep +++ b/templates/ContentGenerator/PODViewer.html.ep @@ -29,9 +29,9 @@

<%= $section_names{macros} %>

% end -% for my $macro (qw(core contexts parsers answers graph math ui misc deprecated)) { +% for my $macro (sort keys %$macros) { % content_for macros_toc => begin - <%= link_to $macro_names{$macro} => "#macro-$macro", class => 'nav-link' %> + <%= link_to $macro_names{$macro} // $macro => "#macro-$macro", class => 'nav-link' %> % end % content_for pod_links => begin

<%= $macro_names{$macro} %>