--- 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)=@_;