Subversion Repositories wimsdev

Rev

Rev 5766 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2071 zjchen 1
!read tabletheme
2
<h4>变量的定义与替换</h4>
3
 
17228 bpr 4
Wims的变量只有一种类型: 它们都是字符串变量.
2071 zjchen 5
对变量的赋值是通过变量命令
4564 bpr 6
$(ref1)cmdlist_eval_&cmd_choose=all$(ref2)cmdlist_eval_">!eval</a> 实现的.
2071 zjchen 7
<p>
8
变量的定义或改变可由变量处理文件完成, 或使用命令
4564 bpr 9
$(ref1)cmdlist_let_&cmd_choose=all$(ref2)cmdlist_let_">!let</a>
2071 zjchen 10
$(ref1)cmdlist_default_&cmd_choose=all$(ref2)cmdlist_default_>!default</a>.
11
<p>
17228 bpr 12
变量名可以使用任何英文字母、数字以及下划线 $(emph)_$emphend.
2071 zjchen 13
对于变量名的长度以及变量值的长度都有限制.
14
(由服务器的配置确定.)
15
<p>
16
在变量处理文件或phtml文件的任何地方(甚至在变量定义命令行的名称栏)
17
都可以进行变量替换. 以字符 $emph$$$emphend 起首的字母串被认为是变量名,
18
而且在包含它的命令行被处理时被替换成它的值.
19
<p>
20
变量替换的特殊规则:
21
<ul>
22
 <li>如果字符 $emph$$$emphend 后接空格, 将被舍弃.
4051 bpr 23
 </li><li>字符串 $emph$$$$$emphend 被替换成单个 $emph$$$emphend.
17228 bpr 24
 </li><li>如果字符 $emph$$$emphend 后接左括号 $emph($emphend,
2071 zjchen 25
  那么会找到匹配的右括号 $emph)$emphend, 括号内的内容将被替换.
26
  替换结果将成为变量名, 而且最后结果是后一变量的值.
27
  这就允许嵌套的替换, 对于变量后接字符数字串也有同样替换.
17228 bpr 28
  <br>: 如果变量 $(emph)i$emphend 取值 $(emph)3$emphend,
2071 zjchen 29
  变量 $(emph)alpha3beta$emphend 将取值 $(emph)pi$emphend,
30
  字符串<pre>
31
  3*$$(alpha$$(i)beta)*x</pre>经替换后变成<pre>
32
  3*pi*x.</pre>
33
  <p>
34
  数组的赋值: 如果变量 $(emph)l$emphend 含有以逗号分隔的表
35
  $(emph)a,b,c,d,e$emphend, 则经替换后, 字符串
36
  <tt>$$(i[3])</tt> 取值 <tt>c</tt>,
37
  <tt>$$(i[2 to 4])</tt> 给出 <tt>b,c,d</tt>, 等等.
38
  <p>
39
  也可给2维数组赋值: 如果
4051 bpr 40
  <pre>$$M=x,y,z;a,b,c</pre>
2071 zjchen 41
  (一个2x3矩阵),
4051 bpr 42
  <pre> $$(M[1;3,2])=z,y </pre>
43
 </li><li>如果字符 $emph$$$emphend 后接左方括号
2071 zjchen 44
  $emph[$emphend, 则先找到匹配的 $emph]$emphend, 括号内的内容被替换,
45
  再被赋予实数值, 其精度由 $emph print_precision$emphend 确定.
17228 bpr 46
  所得的值前面加上 $emph$$$emphend 后代替原来的美元号加一对方括号及其中的所有内容.<br>
2071 zjchen 47
  它可用于作为数组的下标.
17228 bpr 48
  <br>: 若变量 $(emph)i$emphend 取值 $(emph)3$emphend,
49
  变量<br>
50
  $(emph)a1$emphend 的值是 $(emph)3$emphend,  <br>
51
  $(emph)a2$emphend 的值是 $(emph)pi$emphend, <br>
2071 zjchen 52
  则经过替换后,<pre>
53
  $$(a$$[$$i-1])*x+$$(a$$[$$i-2])</pre>成为<pre>
54
  pi*x+3.</pre>
4051 bpr 55
 </li><li>如果经替换后变量的值仍含有字符
2071 zjchen 56
  $emph$$$emphend, 那么继续进行替换, 直至没有替换可作为止.
17228 bpr 57
  服务器对嵌套替换的层次有个上限;
2071 zjchen 58
  无限嵌套的替换会因超过这个限制而以出错信息结束.
4051 bpr 59
  </li>
2071 zjchen 60
</ul>
61
 
17228 bpr 62
<hr><h4>被保留的变量名</h4>
2071 zjchen 63
 
64
以下名称有特殊意义, 不能用在任何模块的内部名称里.
65
 
66
<ul>
67
 <li>不要使用全由数字组成的变量名.
68
  这将留作以后系统的发展使用.
4051 bpr 69
 </li><li>变量名
2071 zjchen 70
  !for i in cmd,module,session,lang,special_parm,user,useropts,worksheet
71
   $emph$i$emphend,
72
  !next i
73
  用于传送用户的特殊参数. 模块的变量处理文件以及phtml文件可以读这些变量,
17228 bpr 74
  但不能给它们设置值.<br>
2071 zjchen 75
  这些变量的意义参见 $emph$title_structure$emphend.
17228 bpr 76
 </li><li>变量 $emph no_name$emphend 有特殊用途: <br>
2071 zjchen 77
  用户询问串里的无名参数(例如把图像坐标传送给http服务器时)就存放在这个变量里.
78
  因此它不能用于其它目的.
4051 bpr 79
 </li><li>所有以 $emph wims_$emphend 起首的名字都对wims服务器有特殊含义.
2071 zjchen 80
  仅当它们被赋予特殊含义时, 模块才能对它们读或写.
4051 bpr 81
 </li><li>$emph m_$emphend 起首的变量名保留作为内嵌数学符号用.
2071 zjchen 82
  模块程序设计者可以对它们重新定义, 但原来的定义就消失了.
4051 bpr 83
 </li><li>变量 $emph module_dir$emphend 的值已被预设为当前模块的目录
2071 zjchen 84
  (相对于服务器的公开网页主目录). 它的值通常是
85
  $emph $$module_dir=module/$$module $emphend
86
  (但可因安装时的配置而改变).
4051 bpr 87
 </li><li>$emph module_$emphend 起首的变量名有特殊含义:
2071 zjchen 88
  它们用于储存模块的INDEX文件所定义的变量. 目前已使用的变量有:
89
 
90
  $table_header
91
  $table_tr<th>变量</th><th>意义</th></tr>
4051 bpr 92
   $table_tr<td>$emph module_title$emphend</td><td>模块名称</td></tr>
93
   $table_tr<td>$emph module_description$emphend</td><td>模块的简短说明</td></tr>
94
   $table_tr<td>$emph module_author$emphend</td><td>模块作者名</td></tr>
95
   $table_tr<td>$emph module_address$emphend</td><td>(主要)作者的电邮地址</td></tr>
96
   $table_tr<td>$emph module_maintainer$emphend</td><td>当前维护者姓名</td></tr>
97
   $table_tr<td>$emph module_maintainer_address$emphend</td><td>维护者电邮地址</td></tr>
98
   $table_tr<td>$emph module_copyright$emphend</td><td>模块的版权</td></tr>
99
   $table_tr<td>$emph module_version$emphend</td><td>模块的当前版本</td></tr>
17228 bpr 100
   $table_tr<td>$emph module_wims_version$emphend</td><td>为执行此模块所需的<br>
4051 bpr 101
   最低wims版本</td></tr>
102
   $table_tr<td>$emph module_language$emphend</td><td>模块语言(cn, en, fr, es,...)</td></tr>
17228 bpr 103
   $table_tr<td>$emph module_category$emphend</td><td>模块的范畴<br>
4051 bpr 104
    (exercise, tool, course, pedia, recreation, adm, other)</td></tr>
105
   $table_tr<td>$emph module_level$emphend</td><td>模块的程度</td></tr>
106
   $table_tr<td>$emph module_domain$emphend</td><td>algebra, analysis, geometry, ...</td></tr>
107
   $table_tr<td>$emph module_keywords$emphend</td><td>关键词, 用于html的头部</td></tr>
108
   $table_tr<td>$emph module_scoring$emphend</td><td>= yes (若模块按wims标准给分)</td></tr>
109
   $table_tr<td>$emph module_data$emphend</td><td>数据模块地址</td></tr>
110
 $table_end
17228 bpr 111
  此外, 变量 $emph module_has_intro$emphend,
2071 zjchen 112
  $emph module_has_help$emphend 以及
113
  $emph module_has_about$emphend
114
  取值 "yes" 意为模块目录里含有相应的 .phtml 文件.
115
  这些变量用于命令 <tt>!homeref</tt>.
4051 bpr 116
 </li><li>$emph httpd_$emphend 起首的变量是httpd设置的环境变量,
2071 zjchen 117
  可供wims模块读出. 例如环境变量 $emph REMOTE_HOST$emphend 在wims内部成为
17228 bpr 118
  $emph httpd_REMOTE_HOST$emphend.<br>
2071 zjchen 119
  这类变量的详情请参看httpd协议的说明.
17228 bpr 120
 </li><li>$emph ins_$emphend, $emph insplot_$emphend, $emph instex_$emphend
121
  起首的变量名都有与插入引擎有关的特殊含义.
2071 zjchen 122
  只有当它们被指定特殊意义时, 模块才能对它们读或写.
4051 bpr 123
 </li><li>如果你的模块使用外部软件包(例如 $emph pari$emphend),
2071 zjchen 124
  那么以与此外部包的接口名后接 $emph _$emphend 的变量名将有特殊含义,
125
  不应用作其它用途.
126
</ul>
127