Diff for /loncom/homework/cleanxml/post_xml.pm between versions 1.9 and 1.11

version 1.9, 2016/01/21 22:09:38 version 1.11, 2016/11/10 21:53:56
Line 136  sub post_xml { Line 136  sub post_xml {
       
   fix_empty_lc_elements($root);    fix_empty_lc_elements($root);
       
     reduce_empty_p($root);
     
   lowercase_attribute_values($root);    lowercase_attribute_values($root);
       
   replace_numericalresponse_unit_attribute($root);    replace_numericalresponse_unit_attribute($root);
Line 1856  sub fix_paragraphs_inside { Line 1858  sub fix_paragraphs_inside {
           push(@new_children, $doc->createElement('p'));            push(@new_children, $doc->createElement('p'));
         }          }
         $p = undef;          $p = undef;
           # ignore the next node if it is a br (the paragraph default margin will take as much space)
           # (ignoring whitespace)
           while (defined $next && $next->nodeType == XML_TEXT_NODE && $next->nodeValue =~ /^[ \t\f\n\r]*$/) {
             my $next2 = $next->nextSibling;
             $node->removeChild($next);
             $next = $next2;
           }
           if (defined $next && $next->nodeType == XML_ELEMENT_NODE && $next->nodeName eq 'br') {
             my $next2 = $next->nextSibling;
             $node->removeChild($next);
             $next = $next2;
           }
       } elsif ($child->nodeType == XML_ELEMENT_NODE && string_in_array(\@inline_like_block, $child->nodeName)) {        } elsif ($child->nodeType == XML_ELEMENT_NODE && string_in_array(\@inline_like_block, $child->nodeName)) {
         # inline_like_block: use the paragraph if there is one, otherwise do not create one          # inline_like_block: use the paragraph if there is one, otherwise do not create one
         if (defined $p) {          if (defined $p) {
Line 2032  sub fix_paragraph { Line 2046  sub fix_paragraph {
               if (!defined $left || !$left_needs_p) {                if (!defined $left || !$left_needs_p) {
                 $replacement->appendChild($middle);                  $replacement->appendChild($middle);
               }                }
                 # ignore the next node if it is a br (the paragraph default margin will take as much space)
                 my $first_right;
                 if (defined $right) {
                   $first_right = $right->firstChild;
                   # ignore non-nbsp whitespace
                   while (defined $first_right && $first_right->nodeType == XML_TEXT_NODE &&
                       $first_right->nodeValue =~ /^[ \t\f\n\r]*$/) {
                     $first_right = $first_right->nextSibling;
                   }
                 }
                 if (defined $first_right && $first_right->nodeType == XML_ELEMENT_NODE &&
                     $first_right->nodeName eq 'br') {
                   $right->removeChild($first_right);
                 }
             } else {              } else {
               fix_paragraphs_inside($n, $all_block);                fix_paragraphs_inside($n, $all_block);
               $replacement->appendChild($n);                $replacement->appendChild($n);
Line 2268  sub fix_empty_lc_elements { Line 2296  sub fix_empty_lc_elements {
     }      }
   }    }
 }  }
   
   # remove consecutive empty paragraphs (they will not show anyway)
   sub reduce_empty_p {
     my ($node) = @_;
     my $next;
     for (my $child=$node->firstChild; defined $child; $child=$next) {
       $next = $child->nextSibling;
       while (defined $next && $next->nodeType == XML_TEXT_NODE && $next->nodeValue =~ /^[ \t\f\n\r]*$/) {
         $next = $next->nextSibling;
       }
       if ($child->nodeType == XML_ELEMENT_NODE && $child->nodeName eq 'p' && defined $next &&
           $next->nodeType == XML_ELEMENT_NODE && $next->nodeName eq 'p') {
         my $first = $child->firstChild;
         if (!defined $first || (!defined $first->nextSibling &&
             $first->nodeType == XML_TEXT_NODE && $first->nodeValue =~ /^[ \t\f\n\r]*$/)) {
           $first = $next->firstChild;
           if (!defined $first || (!defined $first->nextSibling &&
               $first->nodeType == XML_TEXT_NODE && $first->nodeValue =~ /^[ \t\f\n\r]*$/)) {
             $node->removeChild($child);
           }
         }
       }
       if ($child->nodeType == XML_ELEMENT_NODE) {
         reduce_empty_p($child);
       }
     }
   }
   
 # turn some attribute values into lowercase when they should be  # turn some attribute values into lowercase when they should be
 sub lowercase_attribute_values {  sub lowercase_attribute_values {

Removed from v.1.9  
changed lines
  Added in v.1.11


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>