From c0edd7e3b41aa0dcf511718079893a20bcd34127 Mon Sep 17 00:00:00 2001 From: P. J. McDermott Date: Fri, 10 Aug 2012 03:09:38 -0400 Subject: Add post-processing script and modules. --- (limited to 'scripts/MarkdownBook/HTMLTree.pm') diff --git a/scripts/MarkdownBook/HTMLTree.pm b/scripts/MarkdownBook/HTMLTree.pm new file mode 100644 index 0000000..27db3e1 --- /dev/null +++ b/scripts/MarkdownBook/HTMLTree.pm @@ -0,0 +1,72 @@ +# 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 HTML::Element; + +package MarkdownBook::HTMLTree; + +sub find_elements_by_tag_names +{ + my ($elem, @tagnames) = @_; + + my @list = $elem->content_list(); + my $tag; + my @retlist = (); + + foreach (@list) { + if (ref($_) ne 'HTML::Element') { + next; + } + $tag = $_->tag(); + if (grep($_ eq $tag, @tagnames)) { + push(@retlist, $_); + } + } + + return @retlist; +} + +sub each_text +{ + my ($code, $elem, @args) = @_; + + my $child = $elem; + my $root = $elem; + + _each_text_recursive($code, $child, $root, @args); +} + +sub _each_text_recursive +{ + my ($code, $elem, $root, @args) = @_; + + my $child; + my $i = -1; + + foreach $child ($elem->content_list()) { + ++$i; + if (ref($_) eq 'HTML::Element') { + _each_text_recursive($code, $child, $root, @args); + } else { + $code->(\$root, $child, @args); + $elem->splice_content($i, 1, $child); + } + } +} + +1; -- cgit v0.9.1