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.pm') diff --git a/scripts/MarkdownBook/Book.pm b/scripts/MarkdownBook/Book.pm index fd43041..547a4f0 100644 --- a/scripts/MarkdownBook/Book.pm +++ b/scripts/MarkdownBook/Book.pm @@ -16,22 +16,18 @@ use strict; use warnings; -use MarkdownBook::Document::Index; -use MarkdownBook::Document::Chapter; -use MarkdownBook::Document::Appendix; -use HTML::Template; - package MarkdownBook::Book; sub new { - my ($class, $dir) = @_; + my ($class, $format, $dir) = @_; my $self; my $control_fh; $class = ref($class) || $class; $self = {}; bless($self,$class); + $self->{'format'} = $format; $self->{'dir'} = $dir; $self->{'docs'} = []; @@ -68,6 +64,13 @@ sub title return $old; } +sub get_document_module +{ + my ($self, $mod) = @_; + + return 'MarkdownBook::Document::' . $self->{'format'} . '::' . $mod; +} + sub create_documents { my ($self) = @_; @@ -80,7 +83,7 @@ sub create_documents my @letters; $i = 0; - $doc = MarkdownBook::Document::Index->new($self); + $doc = $self->get_document_module('Index')->new($self); $doc_prev = $doc; push(@{$self->{'docs'}}, $doc); @@ -88,7 +91,7 @@ sub create_documents while (<$series_fh>) { chomp($_); ($file, $title) = split(/[ \t]+/, $_, 2); - $doc = MarkdownBook::Document::Chapter->new($self, $file, + $doc = $self->get_document_module('Chapter')->new($self, $file, ++$i, $title); $doc->prev($doc_prev); $doc_prev->next($doc) if defined $doc_prev; @@ -105,7 +108,7 @@ sub create_documents while (<$series_fh>) { chomp($_); ($file, $title) = split(/[ \t]+/, $_, 2); - $doc = MarkdownBook::Document::Appendix->new($self, $file, + $doc = $self->get_document_module('Appendix')->new($self, $file, $letters[++$i], $title); $doc->prev($doc_prev); $doc_prev->next($doc) if defined $doc_prev; @@ -129,65 +132,4 @@ sub list_documents } } -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 'MarkdownBook::Document::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