Diff for /loncom/homework/cleanxml/post_xml.pm between versions 1.2 and 1.4

version 1.2, 2015/12/15 15:01:01 version 1.4, 2015/12/18 22:07:42
Line 45  use Tie::IxHash; # for ordered hashes Line 45  use Tie::IxHash; # for ordered hashes
 no warnings 'recursion'; # yes, fix_paragraph is using heavy recursion, I know  no warnings 'recursion'; # yes, fix_paragraph is using heavy recursion, I know
   
 # these are constants  # these are constants
 my @block_elements = ('parameter','location','answer','foil','image','polygon','rectangle','text','conceptgroup','itemgroup','item','label','data','function','array','unit','answergroup','functionplotresponse','functionplotruleset','functionplotelements','functionplotcustomrule','essayresponse','hintpart','formulahint','numericalhint','reactionhint','organichint','optionhint','radiobuttonhint','stringhint','customhint','mathhint','formulahintcondition','numericalhintcondition','reactionhintcondition','organichintcondition','optionhintcondition','radiobuttonhintcondition','stringhintcondition','customhintcondition','mathhintcondition','imageresponse','foilgroup','datasubmission','textfield','hiddensubmission','radiobuttonresponse','rankresponse','matchresponse','import','style','script','window','block','library','notsolved','part','postanswerdate','preduedate','problem','problemtype','randomlabel','bgimg','labelgroup','randomlist','solved','while','tex','print','web','gnuplot','curve','Task','IntroParagraph','ClosingParagraph','Question','QuestionText','Setup','Instance','InstanceText','Criteria','CriteriaText','GraderNote','languageblock','translated','lang','instructorcomment','dataresponse','togglebox','standalone','comment','drawimage','allow','displayduedate','displaytitle','responseparam','organicstructure','scriptlib','parserlib','drawoptionlist','spline','backgroundplot','plotobject','plotvector','drawvectorsum','functionplotrule','functionplotvectorrule','functionplotvectorsumrule','axis','key','xtics','ytics','title','xlabel','ylabel','hiddenline','dtm');  my @block_elements = ('parameter','location','answer','foil','image','polygon','rectangle','text','conceptgroup','itemgroup','item','label','data','function','array','unit','answergroup','functionplotresponse','functionplotruleset','functionplotelements','functionplotcustomrule','essayresponse','hintpart','formulahint','numericalhint','reactionhint','organichint','optionhint','radiobuttonhint','stringhint','customhint','mathhint','formulahintcondition','numericalhintcondition','reactionhintcondition','organichintcondition','optionhintcondition','radiobuttonhintcondition','stringhintcondition','customhintcondition','mathhintcondition','imageresponse','foilgroup','datasubmission','textfield','hiddensubmission','radiobuttonresponse','rankresponse','matchresponse','import','style','script','window','block','library','notsolved','part','postanswerdate','preduedate','problem','problemtype','randomlabel','bgimg','labelgroup','randomlist','solved','while','tex','print','web','gnuplot','curve','Task','IntroParagraph','ClosingParagraph','Question','QuestionText','Setup','Instance','InstanceText','Criteria','CriteriaText','GraderNote','languageblock','instructorcomment','dataresponse','togglebox','standalone','comment','drawimage','allow','displayduedate','displaytitle','responseparam','organicstructure','scriptlib','parserlib','drawoptionlist','spline','backgroundplot','plotobject','plotvector','drawvectorsum','functionplotrule','functionplotvectorrule','functionplotvectorsumrule','axis','key','xtics','ytics','title','xlabel','ylabel','hiddenline','dtm');
 my @inline_like_block = ('stringresponse','optionresponse','numericalresponse','formularesponse','mathresponse','organicresponse','reactionresponse','customresponse','externalresponse', 'hint', 'hintgroup'); # inline elements treated like blocks for pretty print and some other things  my @inline_like_block = ('stringresponse','optionresponse','numericalresponse','formularesponse','mathresponse','organicresponse','reactionresponse','customresponse','externalresponse', 'hint', 'hintgroup','translated','lang'); # inline elements treated like blocks for pretty print and some other things
 my @responses = ('stringresponse','optionresponse','numericalresponse','formularesponse','mathresponse','organicresponse','reactionresponse','customresponse','externalresponse','essayresponse','radiobuttonresponse','matchresponse','rankresponse','imageresponse','functionplotresponse');  my @responses = ('stringresponse','optionresponse','numericalresponse','formularesponse','mathresponse','organicresponse','reactionresponse','customresponse','externalresponse','essayresponse','radiobuttonresponse','matchresponse','rankresponse','imageresponse','functionplotresponse');
 my @block_html = ('html','head','body','section','h1','h2','h3','h4','h5','h6','div','p','ul','ol','li','table','tbody','tr','td','th','dl','dt','dd','pre','noscript','hr','address','blockquote','object','applet','embed','map','form','fieldset','iframe','center','frameset');  my @block_html = ('html','head','body','section','h1','h2','h3','h4','h5','h6','div','p','ul','ol','li','table','tbody','tr','td','th','dl','dt','dd','pre','noscript','hr','address','blockquote','object','applet','embed','map','form','fieldset','iframe','center','frameset');
 my @no_newline_inside = ('import','parserlib','scriptlib','data','function','label','xlabel','ylabel','tic','text','rectangle','image','title','h1','h2','h3','h4','h5','h6','li','td','p');  my @no_newline_inside = ('import','parserlib','scriptlib','data','function','label','xlabel','ylabel','tic','text','rectangle','image','title','h1','h2','h3','h4','h5','h6','li','td','p');
Line 94  sub post_xml { Line 94  sub post_xml {
       
   fix_attribute_case($root);    fix_attribute_case($root);
       
   my $fix_by_hand = replace_m($root);    replace_m($root);
       
   my @all_block = (@block_elements, @block_html);    my @all_block = (@block_elements, @block_html);
   add_sty_blocks($file_path, $res_dir, $root, \@all_block); # must come before the subs using @all_block    add_sty_blocks($file_path, $res_dir, $root, \@all_block); # must come before the subs using @all_block
Line 142  sub post_xml { Line 142  sub post_xml {
   
   replace_tm_dtm($root);    replace_tm_dtm($root);
       
   if ($fix_by_hand) {  
     die "The file has been converted but it should be fixed by hand.";  
   }  
   return $dom_doc->toString(); # byte string !    return $dom_doc->toString(); # byte string !
 }  }
   
Line 355  sub fix_attribute_case { Line 352  sub fix_attribute_case {
 # Replaces m by HTML, tm and/or dtm (which will be replaced by <m> later, but they are useful  # Replaces m by HTML, tm and/or dtm (which will be replaced by <m> later, but they are useful
 #   to know if the element is a block element or not).  #   to know if the element is a block element or not).
 # m might contain non-math LaTeX, while tm and dtm may only contain math.  # m might contain non-math LaTeX, while tm and dtm may only contain math.
 # Returns 1 if the file should be fixed by hand, 0 otherwise.  
 sub replace_m {  sub replace_m {
   my ($root) = @_;    my ($root) = @_;
   my $doc = $root->ownerDocument;    my $doc = $root->ownerDocument;
   my $fix_by_hand = 0;  
   # search for variable declarations    # search for variable declarations
   my @variables = ();    my @variables = ();
   my @scripts = $root->getElementsByTagName('script');    my @scripts = $root->getElementsByTagName('script');
Line 408  sub replace_m { Line 403  sub replace_m {
           if ($warnings) {            if ($warnings) {
             print "WARNING: <m> is used in a script, it should be converted by hand\n";              print "WARNING: <m> is used in a script, it should be converted by hand\n";
           }            }
           $fix_by_hand = 1;  
         }          }
       }        }
     }      }
Line 423  sub replace_m { Line 417  sub replace_m {
       if ($warnings) {        if ($warnings) {
         print "WARNING: m value is not simple text\n";          print "WARNING: m value is not simple text\n";
       }        }
       $fix_by_hand = 1;  
       next;        next;
     }      }
     my $text = $m->firstChild->nodeValue;      my $text = $m->firstChild->nodeValue;
Line 554  sub replace_m { Line 547  sub replace_m {
     $m->parentNode->replaceChild($fragment, $m);      $m->parentNode->replaceChild($fragment, $m);
           
   }    }
   return $fix_by_hand;  
 }  }
   
 # Returns the HTML equivalent of LaTeX input, using tth  # Returns the HTML equivalent of LaTeX input, using tth
Line 1820  sub remove_useless_notsolved { Line 1812  sub remove_useless_notsolved {
 sub fix_paragraphs_inside {  sub fix_paragraphs_inside {
   my ($node, $all_block) = @_;    my ($node, $all_block) = @_;
   # blocks in which paragrahs will be added:    # blocks in which paragrahs will be added:
   my @blocks_with_p = ('loncapa','library','problem','part','problemtype','window','block','while','postanswerdate','preduedate','solved','notsolved','languageblock','translated','lang','instructorcomment','togglebox','standalone','form');    my @blocks_with_p = ('loncapa','library','problem','part','problemtype','window','block','while','postanswerdate','preduedate','solved','notsolved','languageblock','instructorcomment','togglebox','standalone','form');
   my @fix_p_if_br_or_p = (@responses,'foil','item','text','label','hintgroup','hintpart','hint','web','windowlink','div','li','dd','td','th','blockquote');    my @fix_p_if_br_or_p = (@responses,'foil','item','text','label','hintgroup','hintpart','hint','web','windowlink','div','li','dd','td','th','blockquote');
   if ((string_in_array(\@blocks_with_p, $node->nodeName) && paragraph_needed($node)) ||    if ((string_in_array(\@blocks_with_p, $node->nodeName) && paragraph_needed($node)) ||
       (string_in_array(\@fix_p_if_br_or_p, $node->nodeName) && paragraph_inside($node))) {        (string_in_array(\@fix_p_if_br_or_p, $node->nodeName) && paragraph_inside($node))) {

Removed from v.1.2  
changed lines
  Added in v.1.4


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