[LON-CAPA-cvs] cvs: loncom(language_hyphenation) /homework structuretags.pm
foxr
foxr at source.lon-capa.org
Mon Dec 12 06:19:53 EST 2011
foxr Mon Dec 12 11:19:53 2011 EDT
Modified files: (Branch: language_hyphenation)
/loncom/homework structuretags.pm
Log:
1. Remove the dual use of $result from start_language block. Use
$render instead to keep track of whether or not the included block
gets rendered.
2. Use last to exit inner comparison loops in start_language if there's a
match. Probably not a huge performance gain but what the heck.
3. Comment the intent/usage of <languageblock> in the code...hopefully
the comments are correct.
Index: loncom/homework/structuretags.pm
diff -u loncom/homework/structuretags.pm:1.497 loncom/homework/structuretags.pm:1.497.2.1
--- loncom/homework/structuretags.pm:1.497 Mon Nov 14 00:20:39 2011
+++ loncom/homework/structuretags.pm Mon Dec 12 11:19:53 2011
@@ -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 2011/11/14 00:20:39 raeburn Exp $
+# $Id: structuretags.pm,v 1.497.2.1 2011/12/12 11:19:53 foxr Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -1539,54 +1539,100 @@
}
return $result;
}
-
+#
+# <languageblock [include='lang1,lang2...'] [exclude='lang1,lang2...']>
+# ...
+# </languageblock>
+#
+# 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 <languageblock>...</languageblock> is rendered
+# If the currently preferred language is in the exclude list,
+# the content in the <languageblock>..></languageblock is not rendered.
+#
+# Pathalogical case handling:
+# - Include specified, without the preferred language but exclude specified
+# also without the preferred langauge results in rendering the block.
+# - Exclude specified without include and excluden not containing a
+# preferred language renders the block.
+# - Include and exclude both specifying the preferred language does not
+# render the block.
+# - If neither include/exclude is specified, the block gets rendered.
+#
+# This tag has no effect when target is in {edit, modified}
+#
sub start_languageblock {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
- my $result;
+ my $result = '';
if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' ||
$target eq 'tex' || $target eq 'analyze' || $target eq 'webgrade') {
my $include = $token->[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
+
+ # 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 the languageblock has no arguments, show the contents
- $result=1;
+
+ # If neither include/nor exlude is present the block is going
+ # to get rendered.
+
+ my $render=1;
my $found=0;
-# Do we have an include argument?
+
+ # If include is specified, don't render the block
+ # unless the preferred language is included in the set.
+
if ($include) {
-# If include is specified, by default, don't render the block
- $result=0;
+ $render=0;
foreach my $included_language (split(/\,/,$include)) {
-# ... but if my preferred language is included, render it
if ($included_language eq $preferred_language) {
- $result=1;
+ $render=1;
$found=1;
+ last; # Only need to find the first.
}
}
}
-# Do we have an exclude argument?
+ # 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.
+
if ($exclude) {
- $result=1;
+ $render=1;
foreach my $excluded_language (split(/\,/,$exclude)) {
if ($excluded_language eq $preferred_language) {
- $result=0;
+ $render=0;
$found=1;
+ last; # Only need to find the first.
}
}
}
- if ($found) { last; }
+ if ($found) {
+ last; # Done on any match of include or exclude.
+ }
}
- if ( ! $result ) {
+ # If $render not true skip the entire block until </languageblock>
+ #
+
+ if ( ! $render ) {
my $skip=&Apache::lonxml::get_all_text("/languageblock",$parser,
$style);
&Apache::lonxml::debug("skipping ahead :$skip: $$parser[-1]");
}
- $result='';
+ # If $render is true, we've not skipped the contents of the <languageglock>
+ # and the normal loncapa processing flow will render it as a matter of course.
+
} elsif ($target eq 'edit') {
$result .=&Apache::edit::tag_start($target,$token);
$result .=&Apache::edit::text_arg(&mt('Include Language:'),'include',
More information about the LON-CAPA-cvs
mailing list