--- make_poll.pl 2003/11/08 21:59:25 1.18 +++ make_poll.pl 2004/04/13 15:11:58 1.21 @@ -9,8 +9,8 @@ use strict; use XML::Parser; -use common; use Carp; +use Text::Iconv; $|=1; @@ -108,6 +108,22 @@ # for unnumbered questions my $u_db_col = "u"; +# output encoding for files, probably defined in header.html also +my $html_encoding="ISO-8859-2"; + +Text::Iconv->raise_error(1); # Conversion errors raise exceptions +my $iconv; + +# convert UTF8 (as from XML file) to 8-bit encoding +sub x { + if (! $iconv) { + $iconv = Text::Iconv->new('UTF8', $html_encoding); + print "output encoding is $html_encoding\n"; + } + return $iconv->convert($_[0]); +} + +1; #------------------------------------------------------------------ @@ -556,10 +572,18 @@ } else { $q_type = $q_db_col; } - + $question_nr{$q_type}++; - $body.=$html{'que_before'} if ($html{'que_before'}); + # attribute markup_before override que_before + my $markup_before = x($attref->{markup_before}); + my $markup_after = x($attref->{markup_after}); + + if (defined($markup_before)) { + $body.=$markup_before; + } elsif ($html{'que_before'}) { + $body.=$html{'que_before'} + } $$ncref = sub { my ($xp, $text) = @_; @@ -567,7 +591,11 @@ if (defined $text) { $body.=x($text); } else { - $body.=$html{'que_after'} if ($html{'que_after'}); + if (defined($markup_after)) { + $body.=$markup_after; + } elsif ($html{'que_after'}) { + $body.=$html{'que_after'} + } } } } @@ -577,7 +605,14 @@ my ($xp, $el, $attref, $ncref) = @_; - $body.=$html{'subque_before'} if ($html{'subque_before'}); + my $markup_before = x($attref->{markup_before}); + my $markup_after = x($attref->{markup_after}); + + if (defined($markup_before)) { + $body.=$markup_before; + } elsif ($html{'subque_before'}) { + $body.=$html{'subque_before'} + } $$ncref = sub { my ($xp, $text) = @_; @@ -585,7 +620,11 @@ if (defined $text) { $body.=x($text); } else { - $body.=$html{'subque_after'} if ($html{'subque_after'}); + if (defined($markup_after)) { + $body.=$markup_after; + } elsif ($html{'subque_after'}) { + $body.=$html{'subque_after'} + } } } } @@ -596,7 +635,14 @@ my ($xp, $el, $attref, $ncref) = @_; - $body.=$html{'ans_before'} if ($html{'ans_before'}); + my $markup_before = x($attref->{markup_before}); + my $markup_after = x($attref->{markup_after}); + + if (defined($markup_before)) { + $body.=$markup_before; + } elsif ($html{'ans_before'}) { + $body.=$html{'ans_before'} + } $$ncref = sub { my ($xp, $text) = @_; @@ -604,7 +650,11 @@ if (defined $text) { $body .= x($text); } else { - $body.=$html{'ans_after'} if ($html{'ans_after'}); + if (defined($markup_after)) { + $body.=$markup_after; + } elsif ($html{'ans_after'}) { + $body.=$html{'ans_after'} + } } } } @@ -695,9 +745,11 @@ # shownumbers="before|after" my $shownumbers=lc(x($attref->{shownumbers})) || 'no'; my $showlabels=lc(x($attref->{showlabels})) || 'no'; + my $class=lc(x($attref->{class})) || ''; + $class=' class="'.$class.'"' if ($class); my $p=new_que(); for (my $i=1; $i<=$nr; $i++) { - $body.=""; + $body.=""; $body.=$i if ($shownumbers eq "before"); if ($showlabels eq "before" && $attref->{"label_$i"}) { $body.=x($attref->{"label_$i"}); @@ -875,6 +927,9 @@ $$ncref = sub { my ($xp, $text) = @_; + # encoding should be checked first since it also + # initialize iconv for conversion from XML's UTF-8 + $html_encoding=$attref->{html_encoding} if ($attref->{html_encoding}); $db_user=x($attref->{db_user}); $prefix=x($attref->{prefix}); $without_invitation=x($attref->{without_invitation}) && @@ -893,6 +948,7 @@ $q_db_col=x($attref->{q_db_col}) || 'q'; $u_db_col=x($attref->{u_db_col}) || 'u'; + } }