[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