update docs

This commit is contained in:
lixianjing 2021-01-10 09:58:41 +08:00
parent fc02053641
commit 5960ec3bac
5 changed files with 157 additions and 219 deletions

View File

@ -40,7 +40,7 @@ print("hello fscript")
如:
```
./bin/runFScript @tests/testdata/demo_while1.fs
./bin/runFScript @tests/fscripts/demo_while1.fs
```
## 3. 语法
@ -51,6 +51,8 @@ print("hello fscript")
* 整数类型 (int32)。支持十进制、二进制和十六进制。
* 字符串类型 (string)。UTF-8 字符串,用英文双引号扩起来。
* 布尔类型 (bool)。标准取值为true 和 false非 0 的数值视为 true。
* 可以通过扩展实现混合数据类型的数组、固定类型的数组和 map。
* 可以通过类型转换函数得到各种基本类型。如 int8/int16/int32/int64/uint8/uint16/uint32/uintg64/float/double。
### 注释
@ -657,7 +659,7 @@ exec("clear", "all")
#### join
> 将多个变量用指定的分隔符拼接起来(最多 7 个字符串),形成一个字符串。
> 将多个变量用指定的分隔符拼接起来,形成一个字符串。
----------------------------
@ -729,7 +731,7 @@ tolower("ABC")
#### trim
> 将字符串转换成小写
> 去掉字符串两端的空白字符串
----------------------------
##### 原型
@ -807,6 +809,7 @@ contains("ab cd", "ab")
```
sum(n1,n2...)
+(n1,n2...)
n1+n2
```
#### 示例
@ -815,18 +818,6 @@ sum(n1,n2...)
print(sum(1, 2, 3))
```
运行:
```
./bin/runFScript 'print(sum(1, 2, 3))'
```
输出:
```
6.000000
```
#### sub
> 计算两个数之差。
@ -837,26 +828,14 @@ print(sum(1, 2, 3))
```
sub(n1,n2)
-(n1,n2)
n1-n2
```
#### 示例
```
print(sub(2, 1))
print(-(2, 1))
```
运行:
```
./bin/runFScript 'print(sub(2, 1))'
```
输出:
```
1.000000
print(2 - 1)
```
#### mul
@ -869,26 +848,14 @@ print(-(2, 1))
```
mul(n1,n2)
*(n1,n2)
n1*n2
```
#### 示例
```
print(mul(2, 1))
print(*(2, 1))
```
运行:
```
./bin/runFScript 'print(mul(2, 1))'
```
输出:
```
2.000000
print(2 * 1)
```
#### div
@ -901,26 +868,14 @@ print(*(2, 1))
```
div(n1,n2)
/(n1,n2)
n1/n2
```
#### 示例
```
print(div(2, 1))
print(/(2, 1))
```
运行:
```
./bin/runFScript 'print(div(2, 1))'
```
输出:
```
2.000000
print(2/1)
```
#### %
@ -931,25 +886,13 @@ print(/(2, 1))
##### 原型
```
%(n1,n2)
n1%n2
```
#### 示例
```
print(%(23, 7))
```
运行:
```
./bin/runFScript 'print(%(23, 7))'
```
输出:
```
2.000000
print(23%7)
```
#### and
@ -961,26 +904,14 @@ print(%(23, 7))
```
and(n1,n2)
&&(n1,n2)
n1 && n2
```
#### 示例
```
print(&&(true, false))
print(&&(true, true))
```
运行:
```
./bin/runFScript 'print(and(true, true))'
```
输出:
```
true
print(true && false)
print(true && true)
```
#### or
@ -992,26 +923,13 @@ true
```
or(n1,n2)
||(n1,n2)
n1 || n2
```
#### 示例
```
print(and(true, false))
print(||(true, true))
```
运行:
```
./bin/runFScript 'print(or(true, false))'
```
输出:
```
true
print(a || b)
```
#### not
@ -1033,105 +951,6 @@ print(not(true))
print(!(false))
```
运行:
```
./bin/runFScript 'print(not(false))'
```
输出:
```
true
```
#### &
> 位与运算。
----------------------------
##### 原型
```
&(n1,n2)
```
#### 示例
```
print(&(1, 1))
```
运行:
```
./bin/runFScript 'print(&(1, 2))'
```
输出:
```
0
```
#### |
> 位或运算。
----------------------------
##### 原型
```
|(1,2)
```
#### 示例
```
print(|(1, 2))
```
运行:
```
./bin/runFScript 'print(|(1, 2))'
```
输出:
```
3
```
#### ~
> 按位取反运算。
----------------------------
##### 原型
```
~(n1)
```
#### 示例
```
print(~(1))
```
运行:
```
./bin/runFScript 'print(iformat("0x%x", ~(1)))'
```
输出:
```
0xfffffffe
```
### 比较函数
> 支持字符串比较。
@ -1455,5 +1274,6 @@ runFScript 的第二个参数可以指定运行次数,方便测量某个函数
### 7. 扩展函数
* [位操作扩展函数](fscript_bits.md)
* [数学扩展函数](fscript_math.md)
* [widget 扩展函数](fscript_widget.md)

88
docs/fscript_bits.md Normal file
View File

@ -0,0 +1,88 @@
### 位操作扩展函数
#### &
> 位与运算。
----------------------------
##### 原型
```
&(n1,n2)
```
#### 示例
```
print(&(1, 1))
```
运行:
```
./bin/runFScript 'print(&(1, 2))'
```
输出:
```
0
```
#### |
> 位或运算。
----------------------------
##### 原型
```
|(1,2)
```
#### 示例
```
print(|(1, 2))
```
运行:
```
./bin/runFScript 'print(|(1, 2))'
```
输出:
```
3
```
#### ~
> 按位取反运算。
----------------------------
##### 原型
```
~(n1)
```
#### 示例
```
print(~(1))
```
运行:
```
./bin/runFScript 'print(iformat("0x%x", ~(1)))'
```
输出:
```
0xfffffffe
```

View File

@ -7,7 +7,7 @@
fscript 和其它主流脚本 (lua/js) 相比,最大的优势就是体积小巧,而且 AWTK 本身依赖于 fscript所以使用 fscript 增加额外代码可以忽略不计数。
在 AWTK 的 UI 文件中直接嵌入 fscript, 有如下优势:
fscript 并不是要取代 C 或 JS 来开发 AWTK 应用程序,而是一个有益的补充,加快应用程序的开发,在 AWTK 的 UI 文件中直接嵌入 fscript, 有如下优势:
* 1. 在特定情况下,可以极大简化程序的实现。
@ -31,6 +31,34 @@ fscript 和其它主流脚本 (lua/js) 相比,最大的优势就是体积小
> 理论上模型是不能操作界面的但在特殊情况下确实有操作界面的需求。在保持视图和模型独立的前提下fscript 让操作界面成为可能。
* 4. 方便生成自定义的组件。很多情况下,需要对现有的控件进行改进和组合,生成新的控件。
比如,我们需要用 text selector 生成一个日期选择控件,用三个 text selector 控件组合成日期选择控件,分别选择年月日。但是 text selector 之间是独立的,而年月和日则是有依赖关系,比如 1 月的天数是 31 天2 月的天数与年份有关。当然我们可以用 C 代码来建立三者的关系,而用 fscript不但实现要简单一些而且由于 xml 和代码在一起,发布和重用也非常方便。
```xml
<row x="10" y="30" w="100%" h="150" children_layout="default(row=1,col=3)">
<text_selector name="year" options="2000-2050" selected_index="9">
<property name="on:value_changed">
<![CDATA[
a = get_days_of_month(widget_get(parent.year, value), widget_get(parent.month, value))
widget_set(parent.day, "options", iformat( "1-%d", a) + "%02d")
]]>
</property>
</text_selector>
<text_selector name="month" options="1-12-%02d" selected_index="8" loop_options="true">
<property name="on:value_changed">
<![CDATA[
a = get_days_of_month(widget_get(parent.year, value), widget_get(parent.month, value))
widget_set(parent.day, "options", iformat( "1-%d", a) + "%02d")
]]>
</property>
</text_selector>
<text_selector name="day" options="1-31-%02d" selected_index="9" />
</row>
```
* 5. 不需要重新编译代码。如果资源文件是在文件系统中,直接更新资源即可,而无需编译和下载固件。
## 2. 事件处理函数
添加事件处理函数,实际上是增加一些自定义的属性,属性名以 on: 开头,紧跟事件名称。如:

View File

@ -79,6 +79,8 @@ int main(int argc, char* argv[]) {
}
}
tk_mem_dump();
app_conf_set_int("foobar", 1);
app_conf_save();
data_writer_factory_destroy(data_writer_factory());
data_reader_factory_destroy(data_reader_factory());
data_writer_factory_set(NULL);