--- loncom/xml/londefdef.pm 2007/04/06 10:33:37 1.363
+++ loncom/xml/londefdef.pm 2007/07/13 18:35:20 1.373
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Tags Default Definition Module
#
-# $Id: londefdef.pm,v 1.363 2007/04/06 10:33:37 foxr Exp $
+# $Id: londefdef.pm,v 1.373 2007/07/13 18:35:20 albertel Exp $
#
#
# Copyright Michigan State University Board of Trustees
@@ -475,19 +475,29 @@ sub end_meta {
sub start_accessrule {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style) = @_;
my $currentstring = '';
- my $eff=&Apache::lonxml::get_param
- ('effect',$parstack,$safeeval,undef,1);
- my $realm=&Apache::lonxml::get_param
- ('realm',$parstack,$safeeval,undef,1);
- my $role=&Apache::lonxml::get_param
- ('role',$parstack,$safeeval,undef,1);
- $realm=~s/\s+//g;
- $realm=~s/\//\_/g;
- $realm=~s/^\_//;
- $realm=~s/\W/\;/g;
- $role=~s/\s+//g;
- $role=~s/\//\_/g;
- $role=~s/\W/\;/g;
+ my $eff =&Apache::lonxml::get_param('effect',$parstack,$safeeval,undef,1);
+ my $realm=&Apache::lonxml::get_param('realm', $parstack,$safeeval,undef,1);
+ my $role =&Apache::lonxml::get_param('role', $parstack,$safeeval,undef,1);
+ my $type =&Apache::lonxml::get_param('type', $parstack,$safeeval,undef,1);
+
+ my ($dom,$crs,$sec,$separator);
+ if ($type eq 'user') {
+ ($dom,$crs,$sec)=split(m{/},$realm);
+ $crs = &LONCAPA::clean_username($crs);
+ $separator = '/';
+ } else {
+ ($dom,$crs,$sec)=split(/\_/,$realm);
+ $crs = &LONCAPA::clean_courseid($crs);
+ $separator = '_';
+ }
+ $dom = &LONCAPA::clean_domain($dom);
+
+ $sec =~s/\W//;
+ $realm = $dom;
+ if ($crs =~ /\S/) { $realm .= $separator.$crs; }
+ if ($sec =~ /\S/) { $realm .= $separator.$sec; }
+ $role=~s/\W//g;
+
if ($target eq 'web') {
my $args='';
if ( $#$parstack > -1 ) { $args=$$parstack[$#$parstack]; }
@@ -498,7 +508,7 @@ sub start_accessrule {
}
}
if ($target eq 'meta') {
- $currentstring=''.$eff.':'.$realm.':'.$role.'';
+ $currentstring=''.$eff.':'.$realm.':'.$role.':'.$type.'';
}
return $currentstring;
}
@@ -516,6 +526,17 @@ sub end_accessrule {
return $currentstring;
}
+sub generate_css_links {
+ my $links;
+ my $css_href = &Apache::lonnet::EXT('resource.0.cssfile');
+ if ($css_href =~ /\S/) {
+ &Apache::lonxml::extlink($css_href);
+ $links .=
+ '';
+ }
+ return $links;
+}
+
#--
tag (end tag required)
sub start_body {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
@@ -530,9 +551,13 @@ sub start_body {
if (&is_inside_of($tagstack, "head")) {
&end_head(@_);
}
+
+ my $extra_head = &generate_css_links();
+
$currentstring =
&Apache::loncommon::start_page($Apache::londefdef::title,
- $Apache::londefdef::head,
+ $Apache::londefdef::head
+ .$extra_head,
{'add_entries' => $token->[2],
'no_title' => 1,
'force_register' => 1});
@@ -1609,7 +1634,11 @@ sub end_a {
&Apache::lonxml::get_param('name',$parstack,$safeeval,undef,1);
if ($href =~ /\S/) {
$href =~ s/([^\\])%/$1\\\%/g;
- $currentstring .= ' ({\tt URI:'.&Apache::lonxml::latex_special_symbols($href).'})';
+ # Substitute special symbols... and allow line breaks at each /
+ #
+ $href = &Apache::lonxml::latex_special_symbols($href);
+ $href =~ s/\//\/\\-/g; # Map / to /\- to allow hyphenation.
+ $currentstring .= ' ({\tt URI:'.$href.'})';
} elsif ($name =~ /\S/) {
$currentstring .= ' ({\tt Anchor:'.&Apache::lonxml::latex_special_symbols($name).'})';
} else {
@@ -1985,19 +2014,14 @@ sub start_table {
} else {
$TeXwidth = $textwidth;
}
- } else {
- $Apache::londefdef::table[-1]{'forcedtablewidth'} = 1;
- }
- # This stuff looks a bit hokey..
- # Percentage width is actually given as an absolute width..
- # so what's the difference?
- #
+ }
+ # if the width is specified as a % it is converted to an absolute width.
+ # otherwise.. just plugged right in the hash
+
if ($TeXwidth=~/%/) {
- $Apache::londefdef::table[-1]{'percent'}=1;
$TeXwidth=~/(\d+)/;
$Apache::londefdef::table[-1]{'width'}=$1*$textwidth/100;
} else {
- $Apache::londefdef::table[-1]{'forcedtablewidth'} = 1; # may or may not need this?
$Apache::londefdef::table[-1]{'width'}=$TeXwidth;
}
# In the end, however the table width cannot be wider than $textwidth...
@@ -2044,6 +2068,7 @@ sub end_table {
if ($target eq 'web' || $target eq 'webgrade') {
$currentstring = $token->[2];
} elsif ($target eq 'tex') {
+ my $border = &Apache::lonxml::get_param('border',$parstack,$safeeval);
my $inmemory = '';
my $output = '';
my $WARNING='';
@@ -2140,11 +2165,11 @@ sub end_table {
my @fwidth=@{$Apache::londefdef::table[-1]{'TeXlen'}[0]};#final width array
my @adjust=();
#step 1. adjustment by maximum value
- my $space_neeeded=0;
+ my $space_needed=0;
for (my $jn=0;$jn<=$#max_len;$jn++) {
- $space_neeeded=$space_neeeded+$max_len[$jn];
+ $space_needed=$space_needed+$max_len[$jn];
}
- if ($space_neeeded<=$available_space) {
+ if ($space_needed<=$available_space) {
for (my $jn=0;$jn<=$#max_len;$jn++) {
if ($fwidth[$jn]==0) {
@@ -2153,11 +2178,11 @@ sub end_table {
}
} else {
#step 2. adjustment by minimum value (estimation)
- $space_neeeded=0;
+ $space_needed=0;
for (my $jn=0;$jn<=$#min_len;$jn++) {
- $space_neeeded+=$min_len[$jn];
+ $space_needed+=$min_len[$jn];
}
- if ($space_neeeded>$available_space) {
+ if ($space_needed>$available_space) {
$WARNING=' \textbf{NOT ENOUGH SPACE FOR TABLE} ';
for (my $jn=0;$jn<=$#max_len;$jn++) {
if ($fwidth[$jn]==0) {
@@ -2174,7 +2199,7 @@ sub end_table {
}
}
if ($how_many_to_scale>0) {
- my $space_to_adjust=($space_neeeded-$available_space)/$how_many_to_scale;
+ my $space_to_adjust=($space_needed-$available_space)/$how_many_to_scale;
foreach my $jn (@to_scale) {
for (my $in=0;$in<=$Apache::londefdef::table[-1]{'row_number'};$in++) {
$Apache::londefdef::table[-1]{'content'}[$in][$jn]=~m/width\s*=\s*(\d+\.?\d*\s*(mm|cm|in|pc|pt)*)/;
@@ -2196,7 +2221,7 @@ sub end_table {
}
} else {
#step 3. adjustment over minimal + corrections
- my $enlarge_coef=$available_space/$space_neeeded;
+ my $enlarge_coef=$available_space/$space_needed;
my $acsessive=0;
for (my $jn=0;$jn<=$#min_len;$jn++) {
$adjust[$jn]=$min_len[$jn]*$enlarge_coef;
@@ -2229,16 +2254,19 @@ sub end_table {
}
}
}
- #use all available width if it is defined in % or as TeXwidth
- if (($Apache::londefdef::table[-1]{'percent'}==1) || ($Apache::londefdef::table[-1]{'forcedtablewidth'}==1)) {
- my $current=0;
- for (my $i=0;$i<=$#fwidth;$i++) {
- $current+=$fwidth[$i];
- }
- my $coef=$Apache::londefdef::table[-1]{'width'}/$current;
- for (my $i=0;$i<=$#fwidth;$i++) {
- $fwidth[$i]*=$coef;
- }
+ # use all available width or specified width as if not specified,
+ # the specified width gets defaulted to the available width.
+
+ my $current=0;
+ for (my $i=0;$i<=$#fwidth;$i++) {
+ $current+=$fwidth[$i];
+ }
+ if ($current == 0) {
+ $current = $Apache::londefdef::table[-1]{'width'};
+ }
+ my $coef=$Apache::londefdef::table[-1]{'width'}/$current;
+ for (my $i=0;$i<=$#fwidth;$i++) {
+ $fwidth[$i]*=$coef;
}
#removing of empty columns if allowed
my $permission=&Apache::lonxml::get_param('TeXDropEmptyColumns',$parstack,$safeeval,undef,0);
@@ -2288,6 +2316,10 @@ sub end_table {
# Do the appropriate magic if this has a colspan
#
+ my $border_char = "";
+ if ($border) {
+ $border_char = "|";
+ }
my $spanwidth = 0;
if ($colspan > 1) {
for (my $spancol = $jn; $spancol < $jn + $colspan; $spancol++) {
@@ -2297,12 +2329,12 @@ sub end_table {
$colspan
."}";
if ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'c') {
- $output .= '{|c|}{';
+ $output .= '{'.$border_char.'c'.$border_char.'}{';
} elsif ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'r') {
- $output .= '{|r|}{';
+ $output .= '{'.$border_char.'r'.$border_char.'}{';
}
else {
- $output .= "{|p{$spanwidth mm}|}{";
+ $output .= '{'.$border_char."p{$spanwidth mm}".$border_char.'}{';
}
} else {
@@ -2318,10 +2350,10 @@ sub end_table {
if ($rowspan > 1) {
if ($colspan == 1) {
if ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'c') {
- $output .= '\multicolumn{1}{|c|}{';
+ $output .= '\multicolumn{1}{'.$border_char.'c'.$border_char.'}{';
$multirow_aligned = 1;
} elsif ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'r') {
- $output .= '\multicolumn{1}{|r|}{';
+ $output .= '\multicolumn{1}{'.$border_char.'r'.$border_char.'}{';
$multirow_aligned = 1;
}
}
@@ -2358,9 +2390,9 @@ sub end_table {
#
if ($colspan == 1 && $rowspan == 1) {
if ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'c') {
- $output .= '\multicolumn{1}{|c|}{';
+ $output .= '\multicolumn{1}{'.$border_char.'c'.$border_char.'}{';
} elsif ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'r') {
- $output .= '\multicolumn{1}{|r|}{';
+ $output .= '\multicolumn{1}{'.$border_char.'r'.$border_char.'}{';
}
}
@@ -2987,9 +3019,10 @@ sub start_img {
# And here's where the semi-quote breaks down: allow the user
# to edit the beast as well by rendering the problem for edit:
} elsif ($target eq 'edit') {
+ my $only = join(',',&Apache::loncommon::filecategorytypes('Pictures'));
$currentstring .=&Apache::edit::tag_start($target,$token);
$currentstring .=&Apache::edit::text_arg('Image Url:','src',$token,70).
- &Apache::edit::browse('src',undef,'alt').' '.
+ &Apache::edit::browse('src',undef,'alt',$only).' '.
&Apache::edit::search('src',undef,'alt').'
';
$currentstring .=&Apache::edit::text_arg('Description:','alt',$token,70).'
';
$currentstring .=&Apache::edit::text_arg('width (pixel):','width',$token,5);