- my ($class, $ctx) = @_;
- require XML::Atom::SimpleFeed;
- require POSIX;
- my $max = $ctx->{max} || MAX_PER_PAGE;
+ my ($ctx) = @_;
+ sub { emit_atom($_[0], $ctx) };
+}
+
+sub generate_thread_atom {
+ my ($ctx) = @_;
+ sub { emit_atom_thread($_[0], $ctx) };
+}
+
+sub generate_html_index {
+ my ($ctx) = @_;
+ sub { emit_html_index($_[0], $ctx) };
+}
+
+# private subs
+
+sub title_tag {
+ my ($title) = @_;
+ $title =~ tr/\t\n / /s; # squeeze spaces
+ # try to avoid the type attribute in title:
+ $title = ascii_html($title);
+ my $type = index($title, '&') >= 0 ? "\ntype=\"html\"" : '';
+ "<title$type>$title</title>";
+}
+
+sub atom_header {
+ my ($feed_opts, $title) = @_;
+
+ $title = title_tag($feed_opts->{description}) unless (defined $title);
+
+ qq(<?xml version="1.0" encoding="us-ascii"?>\n) .
+ qq{<feed\nxmlns="http://www.w3.org/2005/Atom">} .
+ qq{$title} .
+ qq(<link\nrel="alternate"\ntype="text/html") .
+ qq(\nhref="$feed_opts->{url}"/>) .
+ qq(<link\nrel="self"\nhref="$feed_opts->{atomurl}"/>) .
+ qq(<id>mailto:$feed_opts->{id_addr}</id>);
+}