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/Document.pm') diff --git a/scripts/MarkdownBook/Document.pm b/scripts/MarkdownBook/Document.pm index f9b9a13..249cdf6 100644 --- a/scripts/MarkdownBook/Document.pm +++ b/scripts/MarkdownBook/Document.pm @@ -94,87 +94,4 @@ sub next return $old; } -sub parse_html -{ - my ($self) = @_; - my $file = $self->{'book'}->dir() . '/' . $self->{'file'} . '.html.in'; - - $self->{'tree'} = HTML::TreeBuilder->new(); - $self->{'tree'}->parse_file($file); -} - -sub number_sections -{ - my ($self) = @_; - - my @headers; - my $header; - my @secnums = (0, 0); - my $curlev = -1; - my $newlev; - my $secstr; - my @children; - my $sectitle; - my $secid; - - @{$self->{'tree_body'}} = MarkdownBook::HTMLTree::find_elements_by_tag_names( - $self->{'tree'}, ('body')); - @headers = MarkdownBook::HTMLTree::find_elements_by_tag_names( - @{$self->{'tree_body'}}[0], ('h1', 'h2')); - - foreach $header (@headers) { - - # Calculate section number. - $newlev = $header->tag(); - $newlev =~ s/^h(\d)$/$1/; - if ($newlev != $curlev) { - foreach (@secnums[$newlev .. $#secnums]) { - $_ = 0; - } - } - $curlev = $newlev; - ++$secnums[$newlev - 1]; - $secstr = join('.', @secnums); - $secstr =~ s/(\.0)*$//; - - MarkdownBook::HTMLTree::each_text(sub { - - # Prefix section title with section number. - my $sectitle = $_[1]; - $sectitle =~ s/^([^\[]+)[ ]*\[[^\]]+\]$/$_[2].$secstr $1/; - - # Set "id" attribute. - if ($_[1] =~ m/^[^\[\]]*\[([^\]]+)\][^\[\]]*$/) { - my $secid = $_[1]; - $secid =~ s/^[^\[\]]*\[([^\]]+)\][^\[\]]*$/$1/; - ${$_[0]}->attr('id', $secid); - } - - # Set section title. - $_[1] = $sectitle; - - }, $header, $self->{'id'}); - - } -} - -sub output -{ - my ($self) = @_; - - my $elem; - my %opt_end_tags; - my $out; - - # Don't omit any end tags. - %opt_end_tags = map([$_ => 0], %HTML::Element::optionalEndTag); - - foreach $elem (@{$self->{'tree_body'}}[0]->content_list()) { - # It's safe to assume (ref($elem) eq 'HTML::Element'). - $out .= $elem->as_HTML('<>&', '', \%opt_end_tags) . "\n"; - } - - return $out; -} - 1; -- cgit v0.9.1