summaryrefslogtreecommitdiffstats
path: root/scripts/MarkdownBook/Book
diff options
context:
space:
mode:
authorP. J. McDermott <pjm@nac.net>2012-08-10 12:30:47 (EDT)
committer P. J. McDermott <pjm@nac.net>2012-08-10 12:30:47 (EDT)
commit5f516d09b5f33284c65b75b5c03d5144ed7c6418 (patch)
tree2b6a9c12670876deef2207bbd4ecfdcc0b9f3e0e /scripts/MarkdownBook/Book
parent06c3d1a57a2842a5360dc2feb00af3098142b4d7 (diff)
Factor format-specific code out of modules.
Diffstat (limited to 'scripts/MarkdownBook/Book')
-rw-r--r--scripts/MarkdownBook/Book/HTML.pm103
1 files changed, 103 insertions, 0 deletions
diff --git a/scripts/MarkdownBook/Book/HTML.pm b/scripts/MarkdownBook/Book/HTML.pm
new file mode 100644
index 0000000..67acc34
--- /dev/null
+++ b/scripts/MarkdownBook/Book/HTML.pm
@@ -0,0 +1,103 @@
+# Copyright (C) 2012 Patrick "P. J." McDermott
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use MarkdownBook::Document::HTML::Index;
+use MarkdownBook::Document::HTML::Chapter;
+use MarkdownBook::Document::HTML::Appendix;
+use HTML::Template;
+
+package MarkdownBook::Book::HTML;
+
+use base qw(MarkdownBook::Book);
+
+sub new
+{
+ my ($class, @args) = @_;
+ my $self;
+
+ $class = ref($class) || $class;
+ $self = {};
+ bless($self,$class);
+
+ $self = $self->SUPER::new('HTML', @args);
+
+ return $self;
+}
+
+sub parse_documents
+{
+ my ($self) = @_;
+ my $doc;
+
+ foreach $doc (@{$self->{'docs'}}) {
+ $doc->parse_html();
+ }
+}
+
+sub number_sections
+{
+ my ($self) = @_;
+ my $doc;
+
+ foreach $doc (@{$self->{'docs'}}) {
+ $doc->number_sections();
+ }
+}
+
+sub write_templated_documents
+{
+ my ($self) = @_;
+ my $doc_tmpl;
+ my $doc;
+ my $doc_fh;
+
+ $doc_tmpl = HTML::Template->new(filename => 'include/document.tmpl');
+
+ foreach $doc (@{$self->{'docs'}}) {
+
+ $doc_tmpl->param(
+ IS_INDEX => (ref($doc) eq $self->get_document_module('Index')));
+
+ $doc_tmpl->param(BOOK_TITLE => $self->{'title'});
+ $doc_tmpl->param(TITLE => $doc->title());
+ $doc_tmpl->param(CHAPT_TITLE => $doc->full_title());
+
+ if (defined($doc->prev())) {
+ $doc_tmpl->param(PREV_LINK => $doc->prev()->file() . '.html');
+ $doc_tmpl->param(PREV_TITLE => $doc->prev()->title());
+ } else {
+ $doc_tmpl->param(PREV_LINK => undef);
+ $doc_tmpl->param(PREV_TITLE => undef);
+ }
+ if (defined($doc->next())) {
+ $doc_tmpl->param(NEXT_LINK => $doc->next()->file() . '.html');
+ $doc_tmpl->param(NEXT_TITLE => $doc->next()->title());
+ } else {
+ $doc_tmpl->param(NEXT_LINK => undef);
+ $doc_tmpl->param(NEXT_TITLE => undef);
+ }
+
+ $doc_tmpl->param(BODY => $doc->output());
+
+ open($doc_fh, '>', $doc->file_path() . '.html');
+ $doc_tmpl->output(print_to => $doc_fh);
+ close($doc_fh);
+ }
+}
+
+1;