<:{ use vars qw(@question_number); @question_number=(0); }:> ;;; Perl code here: <define-tag next-question><:{ my $temp = pop(@question_number)+1; push @question_number, $temp; my $qn_text = join(".", @question_number); print $qn_text; }:></define-tag> ;;; Perl code here: <define-tag promote><:{ push @question_number, 0; }:></define-tag> ;;; Perl code here: <define-tag demote><:{ pop(@question_number); }:></define-tag> <define-tag question endtag="required"> ;;; Define anchor to be the first argument <preserve anchor /> ;;; Define title to be the second argument <preserve title /> ;;; This statement is required to actually set ;;; anchor and title to a proper value <set-var %attributes /> ;;; next-question is defined above <set-var question-number="<next-question />" /> <if <get-var render-body /> ;;; If the question should be rendered. " <p id="<get-var anchor />"><b><get-var question-number />. <get-var title /></b></p> %body " ;;; If not "<a href="answers.html#<get-var anchor />"><get-var question-number />. <get-var title /></a><br />" /> ;;; Restore their previous values <restore title /> <restore anchor /> </define-tag>