diff options
Diffstat (limited to 'scripts/MarkdownBook/Section')
-rw-r--r-- | scripts/MarkdownBook/Section/HTML.pm | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/scripts/MarkdownBook/Section/HTML.pm b/scripts/MarkdownBook/Section/HTML.pm new file mode 100644 index 0000000..8208d9e --- /dev/null +++ b/scripts/MarkdownBook/Section/HTML.pm @@ -0,0 +1,66 @@ +# 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 HTML::Element; + +package MarkdownBook::Section::HTML; + +our @ISA = qw(MarkdownBook::Section); + +sub new +{ + my ($class, $doc, $num, $elem) = @_; + my $self; + my $child; + my $i = -1; + my $secid; + my $sectitle; + + $class = ref($class) || $class; + $self = {}; + bless($self, $class); + + $self->{'document'} = $doc; + $self->{'number'} = $num; + $self->{'element'} = $elem; + + foreach $child (MarkdownBook::HTMLTree::each_text($elem)) { + + ++$i; + + # Set "id" attribute. + if ($child =~ m/^[^\[\]]*\[([^\]]+)\][^\[\]]*$/) { + $secid = $child; + $secid =~ s/^[^\[\]]*\[([^\]]+)\][^\[\]]*$/$1/; + $elem->attr('id', $secid); + } + + # Prefix section title with section number. + $child =~ s/^([^\[]+)[ ]*\[[^\]]+\]$/$1/; + $child =~ s/[ ]*$//; + + # Set section title. + $sectitle .= $child; + $elem->splice_content($i, 1, $num . ' ' . $child); + + } + + return $self; +} + +1; |