summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/stex/problem/problem.sty.ltxml
blob: 85fb12e7bbee1dea5551e68a41b4b408272e5691 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
RawTeX('
\newif\ifexnotes\exnotesfalse
\newif\ifhints\hintsfalse
\newif\ifsolutions\solutionsfalse
\newif\ifpts\ptsfalse
\newif\ifmin\minfalse
\newif\ifboxed\boxedfalse
\newif\ifextract\extractfalse
');
# -*- CPERL -*-
package LaTeXML::Package::Pool;
use strict;
use LaTeXML::Package;
RequirePackage('sref');
RegisterNamespace('prob'=>"http://omdoc.org/ontology/problems#");
RegisterDocumentNamespace('prob'=>"http://omdoc.org/ontology/problems#");
DefEnvironment('{problem} OptionalKeyVals:problem',
   "<omdoc:exercise ?&KeyVal(#1,'id')(xml:id='&KeyVal(#1,'id')')()>"
  .    "?&KeyVal(#1,'title')(<dc:title>&KeyVal(#1,'title')</dc:title>)()"
   .    "?&KeyVal(#1,'min')("
   .       "<omdoc:meta property='prob:solvedinminutes' prob:dummy='for the namespace'>"
   .          "&KeyVal(#1,'min')"
   .       "</omdoc:meta>)()"
   .    "?&KeyVal(#1,'pts')("
   .       "<omdoc:meta property='prob:points' prob:dummy='for the namespace'>"
   .         "&KeyVal(#1,'pts')"
   .       "</omdoc:meta>)()"
   .   "<omdoc:CMP><omdoc:p>#body"
   ."</omdoc:exercise>",
   afterDigest => sub {
     my ($stomach,$kv)=@_;
     my $kvi = LookupValue('inclprob');
     my @keys = qw(id title min pts);
     my @vals = $kvi && map($kvi->getValue($_), @keys);
     foreach my $i(0..$#vals) {
       $kv->setValue($keys[$i],$vals[$i]) if $vals[$i];
     }
     return;});#$
DefKeyVal('soln','id','Semiverbatim');
DefKeyVal('soln','height','Semiverbatim');
DefKeyVal('soln','for','Semiverbatim');
DefEnvironment('{solution} OptionalKeyVals:soln',
       "<omdoc:solution ?&KeyVals(#1,'for')(for='&KeyVal(#1,'for')')()>"
     . "#body"
     . "</omdoc:solution>");
DefEnvironment('{exnote}',"<omdoc:hint><omdoc:CMP><omdoc:p>#body</omdoc:hint>");
DefEnvironment('{hint}',"<omdoc:hint><omdoc:CMP><omdoc:p>#body</omdoc:hint>");
DefConstructor('\pts{}',"");
DefConstructor('\min{}',"");
DefKeyVal('prob','pts','Semiverbatim');
DefKeyVal('prob','min','Semiverbatim');
DefKeyVal('prob','title','Semiverbatim');
DefConstructor('\includeproblem OptionalKeyVals:prob Semiverbatim',
   "<omdoc:ref type='cite' xref='#2'>"
 .  "?&KeyVal(#1,'title')(<dc:title>&KeyVal(#1,'title')</dc:title>)()"
 .  "?&KeyVal(#1,'min')("
 .     "<omdoc:meta property='prob:solvedinminutes' prob:dummy='for the namespace'>"
 .       "&KeyVal(#1,'min')"
 .     "</omdoc:meta>)()"
 .  "?&KeyVal(#1,'pts')("
 .     "<omdoc:meta property='prob:points' prob:dummy='for the namespace'>"
 .       "&KeyVal(#1,'pts')"
 .     "</omdoc:meta>)()"
 ."</omdoc:ref>",
 afterDigest => sub{
   my ($stomach,$kv) = @_;
   AssignValue('inclprob',$kv) if $kv;
 });
Tag('omdoc:exercise',afterOpen=>\&numberIt);
Tag('omdoc:solution',afterOpen=>\&numberIt);
Tag('omdoc:hint',afterOpen=>\&numberIt);
Tag('omdoc:exercise',afterOpen=>\&numberIt,afterClose=>\&locateIt);
Tag('omdoc:solution',afterOpen=>\&numberIt,afterClose=>\&locateIt);
Tag('omdoc:hint',afterOpen=>\&numberIt,afterClose=>\&locateIt);
1;