From 5f516d09b5f33284c65b75b5c03d5144ed7c6418 Mon Sep 17 00:00:00 2001 From: P. J. McDermott Date: Fri, 10 Aug 2012 12:30:47 -0400 Subject: Factor format-specific code out of modules. --- (limited to 'scripts/MarkdownBook/Book') 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 . + +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; -- cgit v0.9.1