--- loncom/homework/structuretags.pm 2011/12/14 11:56:08 1.497.2.4 +++ loncom/homework/structuretags.pm 2013/05/03 15:38:52 1.512 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # definition of tags that give a structure to a document # -# $Id: structuretags.pm,v 1.497.2.4 2011/12/14 11:56:08 foxr Exp $ +# $Id: structuretags.pm,v 1.512 2013/05/03 15:38:52 bisitz Exp $ # # Copyright Michigan State University Board of Trustees # @@ -61,6 +61,7 @@ use Apache::lonlocal; use Apache::lonxml; use Apache::londefdef; use Apache::lonenc(); +use Apache::loncommon(); use Time::HiRes qw( gettimeofday tv_interval ); use lib '/home/httpd/lib/perl/'; use LONCAPA; @@ -96,13 +97,13 @@ my %languages_required; sub select_hyphenation { my $language = shift; - $language = &Apache::loncommon::latex_language($language); # Translate -> latex language. + $language = &Apache::loncommon::latexlanguage($language); # Translate -> latex language. # If there is no latex language there's not much we can do: if ($language) { &require_language($language); - my $babel_hyphenation = "\\select_language{$language}"; + my $babel_hyphenation = "\\selectlanguage{$language}"; return $babel_hyphenation; } else { @@ -110,6 +111,28 @@ sub select_hyphenation { } } ## +# Selects hyphenation based on the current problem metadata. +# This requires that +# - There is a language metadata item set for the problem. +# - The language has a latex/babel hyphenation. +# +# @note: Uses &Apache::lonxml::request to locate the Uri associated with +# this problem. +# @return string (possibly empty). +# @retval If not empty an appropriate \selectlanguage{} directive. +# +sub select_metadata_hyphenation { + my $uri = $Apache::lonxml::request->uri; + my $language = &Apache::lonnet::metadata($uri, 'language'); + my $latex_language = &Apache::loncommon::latexhyphenation($language); + if ($latex_language) { + return '\selectlanguage{'.$latex_language."}\n"; + } + return ''; # no latex hyphenation or no lang metadata. +} + + +## # Clears the set of languages required by the document being rendered. # sub clear_required_languages { @@ -122,7 +145,6 @@ sub clear_required_languages { # sub require_language { my $language = shift; - $languages_required{$language} = 1; } @@ -133,9 +155,8 @@ sub require_language { # @retval \usepackage[lang1,lang2...]{babel} # @retval '' if there are no languages_required. sub languages_header { - my $header =''; - my @languages = keys(%languages_required); + my @languages = (keys(%languages_required)); # Only generate the header if there are languages: @@ -143,7 +164,6 @@ sub languages_header { my $language_list = join(',', (@languages)); $header = '\usepackage['.$language_list."]{babel}\n"; } - return $header; } @@ -433,7 +453,6 @@ sub page_start { } $form_tag_start.='>'."\n"; - my $symb=&Apache::lonnet::symbread(); if ($symb =~ /\S/) { $symb= &HTML::Entities::encode(&Apache::lonenc::check_encrypt($symb)); @@ -691,7 +710,7 @@ sub problem_web_to_edit_header { ".&mt("Problem Type:")." '; # create a page header and exit @@ -1289,6 +1355,8 @@ sub start_problem { } } elsif ($target eq 'tex') { $result .= 'INSERTTEXFRONTMATTERHERE'; + $result .= &select_metadata_hyphenation(); + } } elsif ($target eq 'edit') { @@ -1345,6 +1413,7 @@ sub end_problem { } my $name_of_resourse= &Apache::lonxml::latex_special_symbols(&get_resource_name($parstack,$safeeval),'header'); my $begin_doc=' \typeout{STAMPOFPASSEDRESOURCESTART Resource

"'.$name_of_resourse.'"

located in
'.$env{'request.uri'}.'
STAMPOFPASSEDRESOURCEEND} \noindent '; + &clear_required_languages(); my $toc_line='\vskip 1 mm\noindent '.$startminipage. '\addcontentsline{toc}{subsection}{'.$name_of_resourse.'}'; @@ -1442,7 +1511,13 @@ sub end_problem { $result.=""; } if ($target eq 'web') { - $result.= &Apache::loncommon::end_page({'discussion' => 1}); + # + # Closing not added by end_page(). + # Added separately at end of this routine, after added + # so document will be valid xhtml. + # + $result.= &Apache::loncommon::end_page({'discussion' => 1, + 'notbody' => 1}); } elsif ($target eq 'tex') { my $endminipage = ''; if (not $env{'form.problem_split'}=~/yes/) { @@ -1493,6 +1568,19 @@ sub end_problem { &reset_problem_globals('problem'); + # + # This shouild be just above the return so that the + # time put in the javascript is as late as possible in the + # computation: + # + if ($target eq 'web') { + $result .= &Apache::lonhtmlcommon::set_compute_end_time(); + # + # Closing tags delayed so any tags + # not in head can appear inside body, for valid xhtml. + # + $result .= "\n"; + } return $result; } @@ -1801,6 +1889,9 @@ sub end_languageblock { $result = &select_hyphenation($which); } $result .= $available_texts{$which}; + if ($target eq 'tex') { + $result .= &select_metadata_hyphenation(); # Restore original language. + } } undef(%available_texts); &Apache::lonxml::deregister('Apache::structuretags',('lang')); @@ -2405,7 +2496,7 @@ sub start_problemtype { ['hide','Hide']] ,$token); $result .=&Apache::edit::checked_arg('When used as type(s):','for', - [ ['exam','Exam/Quiz Problem'], + [ ['exam','Bubblesheet Exam/Quiz Problem'], ['survey','Survey'], ['surveycred','Survey (with credit)'], ['anonsurvey','Anonymous Survey'], @@ -2452,9 +2543,9 @@ sub end_startouttext { .''.&mt('Delete?').' ' .&Apache::edit::deletelist($target,$token) .'' - .'' + .'' .&Apache::lonhtmlcommon::dragmath_button($areaid,1) - .'' + .'' .'' .&Apache::edit::insertlist($target,$token) .''