[LON-CAPA-cvs] cvs: loncom /homework essayresponse.pm inputtags.pm matchresponse.pm optionresponse.pm radiobuttonresponse.pm rankresponse.pm structuretags.pm /xml lonxml.pm
raeburn
raeburn at source.lon-capa.org
Fri Aug 7 15:41:00 EDT 2026
raeburn Fri Aug 7 19:41:00 2026 EDT
Modified files:
/loncom/homework essayresponse.pm inputtags.pm matchresponse.pm
optionresponse.pm radiobuttonresponse.pm
rankresponse.pm structuretags.pm
/loncom/xml lonxml.pm
Log:
- Better solution for underscores in fieldnames in PDF forms in SLES12.
Instead of conditionally escaping underscores based on TeX Live version,
simply leave all underscores and ampersands unescaped in fieldnames and
use \detokenize{$fieldname} for all distros.
-------------- next part --------------
Index: loncom/homework/essayresponse.pm
diff -u loncom/homework/essayresponse.pm:1.131 loncom/homework/essayresponse.pm:1.132
--- loncom/homework/essayresponse.pm:1.131 Thu Aug 6 21:45:46 2026
+++ loncom/homework/essayresponse.pm Fri Aug 7 19:41:00 2026
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# essay (ungraded) style responses
#
-# $Id: essayresponse.pm,v 1.131 2026/08/06 21:45:46 raeburn Exp $
+# $Id: essayresponse.pm,v 1.132 2026/08/07 19:41:00 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -146,19 +146,11 @@
$udom,$uname);
if ((exists($uuids{$env{'request.course.id'}.':'.$env{'request.symb'}})) &&
($uuids{$env{'request.course.id'}.':'.$env{'request.symb'}})) {
- my $escpart = $part;
- my $escid = $id;
- my $sep = '_';
- if ($Apache::lonnet::texlive > 2013) {
- $sep = '\_';
- $escpart =~ s{_}{\\_}g;
- $escid =~ s{_}{\\_}g;
- }
- my $fieldname = 'uuid'.$sep.$uuids{$env{'request.course.id'}.':'.$env{'request.symb'}}
- .'\&user'.$sep.$digest
- .'\&part'.$sep.$escpart
- .'\&essay'
- .'\&HWDRAFT'.$sep.$escid;
+ my $fieldname = 'uuid_'.$uuids{$env{'request.course.id'}.':'.$env{'request.symb'}}
+ .'&user_'.$digest
+ .'&part_'.$part
+ .'&essay'
+ .'&HWDRAFT_'.$id;
return "\\begin{itemize}"
.'\item[{'
.&Apache::lonxml::print_pdf_radiobutton($fieldname,'yes')
Index: loncom/homework/inputtags.pm
diff -u loncom/homework/inputtags.pm:1.377 loncom/homework/inputtags.pm:1.378
--- loncom/homework/inputtags.pm:1.377 Thu Aug 6 21:45:46 2026
+++ loncom/homework/inputtags.pm Fri Aug 7 19:41:00 2026
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# input definitions
#
-# $Id: inputtags.pm,v 1.377 2026/08/06 21:45:46 raeburn Exp $
+# $Id: inputtags.pm,v 1.378 2026/08/07 19:41:00 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -549,20 +549,11 @@
$udom,$uname);
if ((exists($uuids{$env{'request.course.id'}.':'.$env{'request.symb'}})) &&
($uuids{$env{'request.course.id'}.':'.$env{'request.symb'}})) {
- my $sep = '_';
- my $escpart = $Apache::inputtags::part;
- my $escres = $Apache::inputtags::response[-1];
- my $escid = $input_id;
- if ($Apache::lonnet::texlive > 2013) {
- $sep = '\_';
- $escpart =~ s{_}{\\_}g;
- $escres =~ s{_}{\\_}g;
- $escid =~ s{_}{\\_}g;
- }
- my $fieldname = 'uuid'.$sep.$uuids{$env{'request.course.id'}.':'.$env{'request.symb'}}
- .'\&user'.$sep.$digest.'\&part'.$sep.$escpart.'\&text\&HWVAL'.$sep
- .$escres.'\&ID'.$sep.$escid;
- $result='\textField{'.$fieldname.'}{'.$size.'}{12 bp}';
+ my $resp = $Apache::inputtags::response[-1];
+ my $fieldname = 'uuid_'.$uuids{$env{'request.course.id'}.':'.$env{'request.symb'}}
+ .'&user_'.$digest.'&part_'.$Apache::inputtags::part.'&text&HWVAL_'
+ .$resp.'&ID_'.$input_id;
+ $result='\textField{\detokenize{'.$fieldname.'}}{'.$size.'}{12 bp}';
}
}
}
Index: loncom/homework/matchresponse.pm
diff -u loncom/homework/matchresponse.pm:1.101 loncom/homework/matchresponse.pm:1.102
--- loncom/homework/matchresponse.pm:1.101 Thu Aug 6 21:45:46 2026
+++ loncom/homework/matchresponse.pm Fri Aug 7 19:41:00 2026
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Full matching style response
#
-# $Id: matchresponse.pm,v 1.101 2026/08/06 21:45:46 raeburn Exp $
+# $Id: matchresponse.pm,v 1.102 2026/08/07 19:41:00 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -679,7 +679,7 @@
} else {
$numrows = 1;
}
- my ($fieldname,$escpart,$sep);
+ my $fieldname;
if (($Apache::lonhomework::type ne 'exam') &&
($target eq 'tex' and $env{'form.pdfFormFields'} eq 'yes'
&& $Apache::inputtags::status[-1] eq 'CAN_ANSWER')) {
@@ -690,16 +690,9 @@
$udom,$uname);
if ((exists($uuids{$env{'request.course.id'}.':'.$env{'request.symb'}})) &&
($uuids{$env{'request.course.id'}.':'.$env{'request.symb'}} ne '')) {
- $escpart = $Apache::inputtags::part;
- my $escres = $Apache::inputtags::response['-1'];
- $sep = '_';
- if ($Apache::lonnet::texlive > 2013) {
- $sep = '\_';
- $escpart =~ s{_}{\\_}g;
- $escres =~ s{_}{\\_}g;
- }
- $fieldname = 'uuid'.$sep.$uuids{$env{'request.course.id'}.':'.$env{'request.symb'}}
- .'\&user'.$sep.$digest.'\&part'.$sep.$escpart.'\&match\&HWVAL'.$sep.$escres.':';
+ my $resp = $Apache::inputtags::response['-1'];
+ $fieldname = 'uuid_'.$uuids{$env{'request.course.id'}.':'.$env{'request.symb'}}
+ .'&user_'.$digest.'&part_'.$Apache::inputtags::part.'&match&HWVAL_'.$resp.':';
}
}
}
@@ -713,7 +706,7 @@
if ($Apache::lonhomework::type ne 'exam') {
if($env{'form.pdfFormFields'} eq 'yes'
&& $Apache::inputtags::status['-1'] eq 'CAN_ANSWER' && $fieldname ne '') {
- $optionlist = &Apache::lonxml::print_pdf_start_combobox($fieldname.$temp.'\&submit'.$sep.$escpart.'\&');
+ $optionlist = &Apache::lonxml::print_pdf_start_combobox($fieldname.$temp.'&submit_'.$Apache::inputtags::part.'&');
} else {
$optionlist='\framebox[10 mm][s]{\tiny\strut}';
}
Index: loncom/homework/optionresponse.pm
diff -u loncom/homework/optionresponse.pm:1.211 loncom/homework/optionresponse.pm:1.212
--- loncom/homework/optionresponse.pm:1.211 Thu Aug 6 21:45:46 2026
+++ loncom/homework/optionresponse.pm Fri Aug 7 19:41:00 2026
@@ -1,7 +1,7 @@
# LearningOnline Network with CAPA
# option list style responses
#
-# $Id: optionresponse.pm,v 1.211 2026/08/06 21:45:46 raeburn Exp $
+# $Id: optionresponse.pm,v 1.212 2026/08/07 19:41:00 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -750,27 +750,20 @@
&mt('Select all that are [_1].','<b>'.$checkboxopt.'</b>');
}
}
- my ($fieldname,$checkboxoff,$hiddennum,$sep);
+ my ($fieldname,$checkboxoff,$hiddennum);
if ($target eq 'tex' and $env{'form.pdfFormFields'} eq 'yes'
&& $Apache::inputtags::status[-1] eq 'CAN_ANSWER') {
my ($uname,$udom,$digest) = &Apache::lonxml::get_user_digest();
- my $escres;
+ my $resp;
if (($env{'request.symb'}) && ($env{'request.course.id'})) {
my %uuids = &Apache::lonnet::get('nohist_formfields',
[$env{'request.course.id'}.':'.$env{'request.symb'}],
$udom,$uname);
if ((exists($uuids{$env{'request.course.id'}.':'.$env{'request.symb'}})) &&
($uuids{$env{'request.course.id'}.':'.$env{'request.symb'}} ne '')) {
- my $escpart = $Apache::inputtags::part;
- $escres = $Apache::inputtags::response['-1'];
- $sep = '_';
- if ($Apache::lonnet::texlive > 2013) {
- $sep = '\_';
- $escpart =~ s{_}{\\_}g;
- $escres =~ s{_}{\\_}g;
- }
- $fieldname = 'uuid'.$sep.$uuids{$env{'request.course.id'}.':'.$env{'request.symb'}}
- .'\&user'.$sep.$digest.'\&part'.$sep.$escpart.'\&option';
+ $resp = $Apache::inputtags::response['-1'];
+ $fieldname = 'uuid_'.$uuids{$env{'request.course.id'}.':'.$env{'request.symb'}}
+ .'&user_'.$digest.'&part_'.$Apache::inputtags::part.'\&option';
}
}
($checkboxopt,$checkboxoff)=&check_box_opt($target,$checkboxvalue, at opt);
@@ -794,10 +787,10 @@
# the the HWHDNOFF form field assigned to each item.
#
if (($checkboxopt ne '') && ($fieldname ne '')) {
- $hiddennum = $fieldname.'\&HWHDNNUM'.$sep.$escres.':';
- my $hiddenoff = $fieldname.'\&HWHDNOFF'.$sep.$escres.':';
+ $hiddennum = $fieldname.'&HWHDNNUM_'.$resp.':';
+ my $hiddenoff = $fieldname.'&HWHDNOFF_'.$resp.':';
$result .= &Apache::lonxml::print_pdf_hidden_textfield($hiddenoff.'0',$checkboxoff).' ';
- my $hiddenon = $fieldname.'\&HWHDNON'.$sep.$escres.':';
+ my $hiddenon = $fieldname.'&HWHDNON_'.$resp.':';
$result .= &Apache::lonxml::print_pdf_hidden_textfield($hiddenon.'0',$checkboxopt).' ';
if (!$no_tfprompt) {
$result .= ($checkboxchoices?&mt('Choices: ').
@@ -807,7 +800,7 @@
}
}
if ($fieldname ne '') {
- $fieldname .= '\&HWVAL'.$sep.$escres.':';
+ $fieldname .= '&HWVAL_'.$resp.':';
}
}
foreach $name (@whichopt) {
Index: loncom/homework/radiobuttonresponse.pm
diff -u loncom/homework/radiobuttonresponse.pm:1.168 loncom/homework/radiobuttonresponse.pm:1.169
--- loncom/homework/radiobuttonresponse.pm:1.168 Thu Aug 6 21:45:46 2026
+++ loncom/homework/radiobuttonresponse.pm Fri Aug 7 19:41:00 2026
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# multiple choice style responses
#
-# $Id: radiobuttonresponse.pm,v 1.168 2026/08/06 21:45:46 raeburn Exp $
+# $Id: radiobuttonresponse.pm,v 1.169 2026/08/07 19:41:00 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -1142,16 +1142,9 @@
$udom,$uname);
if ((exists($uuids{$env{'request.course.id'}.':'.$env{'request.symb'}})) &&
($uuids{$env{'request.course.id'}.':'.$env{'request.symb'}} ne '')) {
- my $escpart = $Apache::inputtags::part;
- my $escres = $Apache::inputtags::response['-1'];
- my $sep = '_';
- if ($Apache::lonnet::texlive > 2013) {
- $sep = '\_';
- $escpart =~ s{_}{\\_}g;
- $escres =~ s{_}{\\_}g;
- }
- my $fieldname = 'uuid'.$sep.$uuids{$env{'request.course.id'}.':'.$env{'request.symb'}}
- .'\&user'.$sep.$digest.'\&part'.$sep.$escpart.'\&radiobutton\&HWVAL'.$sep.$escres;
+ my $resp = $Apache::inputtags::response['-1'];
+ my $fieldname = 'uuid_'.$uuids{$env{'request.course.id'}.':'.$env{'request.symb'}}
+ .'&user_'.$digest.'&part_'.$Apache::inputtags::part.'&radiobutton&HWVAL_'.$resp;
$result = "\\begin{$venv}";
foreach my $name ( @{$whichfoils} ) {
$result .= '\item[{'
Index: loncom/homework/rankresponse.pm
diff -u loncom/homework/rankresponse.pm:1.80 loncom/homework/rankresponse.pm:1.81
--- loncom/homework/rankresponse.pm:1.80 Thu Aug 6 21:45:46 2026
+++ loncom/homework/rankresponse.pm Fri Aug 7 19:41:00 2026
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# rank style response
#
-# $Id: rankresponse.pm,v 1.80 2026/08/06 21:45:46 raeburn Exp $
+# $Id: rankresponse.pm,v 1.81 2026/08/07 19:41:00 raeburn Exp $
# Copyright Michigan State University Board of Trustees
#
# This file is part of the LearningOnline Network with CAPA (LON-CAPA).
@@ -412,16 +412,8 @@
$udom,$uname);
if ((exists($uuids{$env{'request.course.id'}.':'.$env{'request.symb'}})) &&
($uuids{$env{'request.course.id'}.':'.$env{'request.symb'}} ne '')) {
- my $escpart = $part;
- my $escres = $id;
- my $sep = '_';
- if ($Apache::lonnet::texlive > 2013) {
- $sep = '\_';
- $escpart =~ s{_}{\\_}g;
- $escres =~ s{_}{\\_}g;
- }
- $fieldname = 'uuid'.$sep.$uuids{$env{'request.course.id'}.':'.$env{'request.symb'}}
- .'\&user'.$sep.$digest.'\&part'.$sep.$escpart.'\&rank\&HWVAL'.$sep.$escres.':';
+ $fieldname = 'uuid_'.$uuids{$env{'request.course.id'}.':'.$env{'request.symb'}}
+ .'&user_'.$digest.'&part_'.$part.'&rank&HWVAL_'.$id.':';
$result .= '\strut \\\\ \strut \\\\' ;
}
}
Index: loncom/homework/structuretags.pm
diff -u loncom/homework/structuretags.pm:1.601 loncom/homework/structuretags.pm:1.602
--- loncom/homework/structuretags.pm:1.601 Thu Aug 6 21:45:46 2026
+++ loncom/homework/structuretags.pm Fri Aug 7 19:41:00 2026
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# definition of tags that give a structure to a document
#
-# $Id: structuretags.pm,v 1.601 2026/08/06 21:45:46 raeburn Exp $
+# $Id: structuretags.pm,v 1.602 2026/08/07 19:41:00 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -2193,14 +2193,8 @@
$udom,$uname);
if ((exists($uuids{$env{'request.course.id'}.':'.$env{'request.symb'}})) &&
($uuids{$env{'request.course.id'}.':'.$env{'request.symb'}})) {
- my $escpart = $Apache::inputtags::part;
- my $sep = '_';
- if ($Apache::lonnet::texlive > 2013) {
- $sep = '\_';
- $escpart =~ s{_}{\\_}g;
- }
- my $fieldname = 'uuid'.$sep.$uuids{$env{'request.course.id'}.':'.$env{'request.symb'}}
- .'\&user'.$sep.$digest.'\&part'.$sep.$escpart.'\&text\&HWRNDSEED';
+ my $fieldname = 'uuid_'.$uuids{$env{'request.course.id'}.':'.$env{'request.symb'}}
+ .'&user_'.$digest.'&part_'.$Apache::inputtags::part.'&text&HWRNDSEED';
$result .= &Apache::lonxml::print_pdf_hidden_textfield($fieldname,$practice_rndseed);
}
}
Index: loncom/xml/lonxml.pm
diff -u loncom/xml/lonxml.pm:1.583 loncom/xml/lonxml.pm:1.584
--- loncom/xml/lonxml.pm:1.583 Wed May 13 23:14:12 2026
+++ loncom/xml/lonxml.pm Fri Aug 7 19:41:00 2026
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# XML Parser Module
#
-# $Id: lonxml.pm,v 1.583 2026/05/13 23:14:12 raeburn Exp $
+# $Id: lonxml.pm,v 1.584 2026/08/07 19:41:00 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -2522,8 +2522,8 @@
=cut
sub print_pdf_radiobutton {
my ($fieldname, $value) = @_;
- return '\radioButton[\symbolchoice{circle}]{'
- .$fieldname.'}{10bp}{10bp}{'.$value.'}';
+ return '\radioButton[\symbolchoice{circle}]{\detokenize{'
+ .$fieldname.'}}{10bp}{10bp}{'.$value.'}';
}
=pod
@@ -2538,7 +2538,7 @@
=cut
sub print_pdf_checkbox {
my ($fieldname, $value) = @_;
- return '\checkBox{'.$fieldname.'}{10bp}{10bp}{'.$value.'}';
+ return '\checkBox{\detokenize{'.$fieldname.'}}{10bp}{10bp}{'.$value.'}';
}
=pod
@@ -2553,7 +2553,7 @@
=cut
sub print_pdf_hidden_textfield {
my ($fieldname, $value) = @_;
- return '\textField[\F{\FHidden}\F{-\FPrint}\BC{1 1 1}\textSize{1}\textColor{1 g}\V{'.$value.'}]{'.$fieldname.'}{0mm}{0mm}';
+ return '\textField[\F{\FHidden}\F{-\FPrint}\BC{1 1 1}\textSize{1}\textColor{1 g}\V{'.$value.'}]{\detokenize{'.$fieldname.'}}{0mm}{0mm}';
}
=pod
@@ -2569,7 +2569,7 @@
my $result;
my ($fieldName) = @_;
$result .= '\begin{tabularx}{\textwidth}{p{2.5cm}X}'."\n";
- $result .= '\comboBox[]{'.$fieldName.'}{2.3cm}{14bp}{'; #
+ $result .= '\comboBox[]{\detokenize{'.$fieldName.'}}{2.3cm}{14bp}{'; #
return $result;
}
@@ -2628,7 +2628,7 @@
my $result;
my ($fieldname, $user, $domain) = @_;
- $result .= '\textField [\F{\FHidden}\F{-\FPrint}\V{'.$domain.'&'.$user.'}]{'.$fieldname.'}{0in}{0in}'."\n";
+ $result .= '\textField [\F{\FHidden}\F{-\FPrint}\V{'.$domain.'&'.$user.'}]{\detokenize{'.$fieldname.'}}{0in}{0in}'."\n";
return $result;
}
More information about the LON-CAPA-cvs
mailing list