--- loncom/homework/structuretags.pm 2011/12/27 19:48:31 1.497.2.6 +++ loncom/homework/structuretags.pm 2011/12/10 17:53:45 1.498 @@ -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.6 2011/12/27 19:48:31 foxr Exp $ +# $Id: structuretags.pm,v 1.498 2011/12/10 17:53:45 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -61,7 +61,6 @@ 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; @@ -70,105 +69,6 @@ BEGIN { &Apache::lonxml::register('Apache::structuretags',('block','languageblock','translated','instructorcomment','while','randomlist','problem','library','web','tex','part','preduedate','postanswerdate','solved','notsolved','problemtype','startpartmarker','startouttext','endpartmarker','endouttext','simpleeditbutton','definetag')); } - -#--------------------------------------------------------------------------------- -# -# This section of code deals with hyphenation management. -# We must do three things: -# - keep track fo the desired languages to alter the header. -# - provide hyphenation selection as needed by each language that appears in the -# text. -# - Provide the header text needed to make available the desired hyphenations. -# -# - -# Hash whose keys are the languages encountered in the document/resource. -# - -my %languages_required; -## -# Given a language selection as input returns a chunk of LaTeX that -# selects the required hyphenator. -# -# @param language - the language being selected. -# @return string -# @retval The LaTeX needed to select the hyphenation appropriate to the language. -# -sub select_hyphenation { - my $language = shift; - - $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 = "\\selectlanguage{$language}"; - - return $babel_hyphenation; - } else { - return ''; - } -} -## -# 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 { - %languages_required = (); -} -## -# Allows an external client of this module to register a need for a language: -# -# @param LaTeX language required: -# -sub require_language { - my $language = shift; - $languages_required{$language} = 1; -} - -## -# Provides the header for babel that indicates the languages -# the document requires. -# @return string -# @retval \usepackage[lang1,lang2...]{babel} -# @retval '' if there are no languages_required. -sub languages_header { - my $header =''; - my @languages = (keys(%languages_required)); - - # Only generate the header if there are languages: - - if (scalar @languages) { - my $language_list = join(',', (@languages)); - $header = '\usepackage['.$language_list."]{babel}\n"; - } - return $header; -} - -#---------------------------------------------------------------------------------- - sub start_web { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; if ($target ne 'edit' && $target ne 'modified') { @@ -1060,6 +960,9 @@ sub reset_problem_globals { undef(%Apache::lonhomework::history); undef(%Apache::lonhomework::results); undef($Apache::inputtags::part); + if ($type eq 'Task') { + undef($Apache::inputtags::slot_name); + } #don't undef this, lonhomework.pm takes care of this, we use this to #detect if we try to do 2 problems in one file # undef($Apache::lonhomework::parsing_a_problem); @@ -1309,8 +1212,6 @@ sub start_problem { } } elsif ($target eq 'tex') { $result .= 'INSERTTEXFRONTMATTERHERE'; - $result .= &select_metadata_hyphenation(); - } } elsif ($target eq 'edit') { @@ -1367,7 +1268,6 @@ 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.'}'; @@ -1642,101 +1542,54 @@ sub end_block { } return $result; } -# -# -# ... -# -# -# This declares the intent to provide content that can be rendered in the -# set of languages in the include specificatino but not in the exclude -# specification. If a currently preferred language is in the include list -# the content in the ... is rendered -# If the currently preferred language is in the exclude list, -# the content in the ..>[2]->{'include'}; my $exclude = $token->[2]->{'exclude'}; my @preferred_languages=&Apache::lonlocal::preferred_languages(); - - # This should not even happen, since we should at least have the server language - - if (!$preferred_languages[0]) { - $preferred_languages[0]='en'; - } - - # Now loop over all languages in order of preference - - my $render; +# This should not even happen, since we should at least have the server language + if (!$preferred_languages[0]) { $preferred_languages[0]='en'; } +# Now loop over all languages in order of preference foreach my $preferred_language (@preferred_languages) { - - # If neither include/nor exlude is present the block is going - # to get rendered. - +# If the languageblock has no arguments, show the contents + $result=1; my $found=0; - $render=1; - - # If include is specified, don't render the block - # unless the preferred language is included in the set. - +# Do we have an include argument? if ($include) { - $render=0; +# If include is specified, by default, don't render the block + $result=0; foreach my $included_language (split(/\,/,$include)) { +# ... but if my preferred language is included, render it if ($included_language eq $preferred_language) { - $render=1; + $result=1; $found=1; - last; # Only need to find the first. } } } - # Do we have an exclude argument? - # If so, and one of the languages matches a preferred language - # inhibit rendering the block. Note that in the pathalogical case the - # author has specified a preferred language in both the include and exclude - # attribte exclude is preferred. - +# Do we have an exclude argument? if ($exclude) { - $render=1; + $result=1; foreach my $excluded_language (split(/\,/,$exclude)) { if ($excluded_language eq $preferred_language) { - $render=0; + $result=0; $found=1; - last; # Only need to find the first. } } } - if ($found) { - last; # Done on any match of include or exclude. - } + if ($found) { last; } } - # If $render not true skip the entire block until - # - - if ( ! $render ) { + if ( ! $result ) { my $skip=&Apache::lonxml::get_all_text("/languageblock",$parser, $style); &Apache::lonxml::debug("skipping ahead :$skip: $$parser[-1]"); } - # If $render is true, we've not skipped the contents of the - # and the normal loncapa processing flow will render it as a matter of course. - + $result=''; } elsif ($target eq 'edit') { $result .=&Apache::edit::tag_start($target,$token); $result .=&Apache::edit::text_arg(&mt('Include Language:'),'include', @@ -1761,47 +1614,9 @@ sub end_languageblock { } return $result; } -# languagblock specific tags: -{ - # For chunks of a resource that has translations, this hash contains - # the translations available indexed by language name. - # - my %available_texts; - - # starts a block of a resource that has multiple translations. - # See the tag as well. - # When is encountered if there is a translation for the - # currently preferred language, that is rendered inthe web/tex/webgrade - # targets. Otherwise, the default text is rendered. - # - # Note that is only registered for the duration of the - # ... block - # - # Pathalogical case handling: - # - If there is no that specifies a 'default' and there is no - # translation that matches a preferred language, nothing is rendered. - # - Nested ... might be linguistically supported by - # XML due to the stack nature of tag registration(?) however the rendered - # output will be incorrect because there is only one %available_texts - # has and end_translated clears it. - # - Material outside of a ... block within the - # ... block won't render either e.g.: - # - # The following will be in your preferred langauge: - # - # This section in english - # - # - # Hier es ist auf Deutsch. - # - # - # En Francais - # - # - # - # The introductory text prior to the first tag is not rendered. - # +{ + my %available_texts; sub start_translated { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; &Apache::lonxml::register('Apache::structuretags',('lang')); @@ -1820,53 +1635,14 @@ sub end_languageblock { my @possibilities = keys(%available_texts); my $which = &Apache::loncommon::languages(\@possibilities) || 'default'; - if ($target eq 'tex') { - $result = &select_hyphenation($which); - } - $result .= $available_texts{$which}; - $result .= &select_metadata_hyphenation(); # Restore original language. + $result = $available_texts{$which}; } undef(%available_texts); &Apache::lonxml::deregister('Apache::structuretags',('lang')); return $result; } - # - # Specifies that the block contained within it is a translation - # for a specific language specified by the 'which' attribute. The - # 'other' attribute can be used by itself or in conjunction with - # which to specify this tag _may_ be used as a translation for some - # list of languages. e.g.: - # specifying that the block provides a translation for US (primary) - # Canadian, Australian and UK Englush. - # - # Comment: this seems a bit silly why not just support a list of languages - # e.g. and ditch the other attribute? - # - # Effect: - # The material within the .. block is stored in the - # specified set of $available_texts hash entries, the appropriate one - # is selected at time. - # - # Pathalogical case handling: - # If a language occurs multiple times within a block, - # only the last one is rendered e.g.: - # - # - # - # Red green color blindness is quite common affecting about 7.8% of - # the male population, but onloy about .65% of the female population. - # - # Red green colour blindness is quite common affecting about 7.8% of - # the male population, but onloy about .65% of the female population. - # - # - # - # renders the correct spelling of color (colour) for people who have specified - # a preferred language that is one of the British Commonwealth languages - # even though those are also listed as valid selections for the US english - # block. - # + sub start_lang { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || @@ -1897,8 +1673,7 @@ sub end_languageblock { } return ''; } -} # end langauge block specific tags. - +} sub start_instructorcomment { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;