Skip to content

Commit

Permalink
style: add spaces
Browse files Browse the repository at this point in the history
  • Loading branch information
Naptie committed Feb 6, 2024
1 parent 0a30f21 commit bb5627f
Show file tree
Hide file tree
Showing 2 changed files with 100 additions and 100 deletions.
2 changes: 1 addition & 1 deletion src/uml/debugging.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
# 如何调试

编译时 `phira-main` 时加入参数 `--features event_debug`, 然后 Phira 客户端可执行文件同目录下新建名为 `test.uml` 的文件. 此后进入任意一个活动, 该活动页面将读取自 `test.uml` 并实时更新.
编译 `phira-main` 时加入参数 `--features event_debug`, 然后在 Phira 客户端可执行文件同目录下新建名为 `test.uml` 的文件. 此后进入任意一个活动, 页面内容将与 `test.uml` 保持实时同步.
198 changes: 99 additions & 99 deletions src/uml/uml.md
Original file line number Diff line number Diff line change
@@ -1,31 +1,31 @@
# UML格式说明V2

修订日期:2/6/2024
修订日期:2024/2/7

UML文件是UI描述文件,可以用来创建于代码解耦的可定制界面。
UML文件格式是纯文本的人类可读格式。UML由Element(元素)、注释和变量定义语句构成,每个元素占据一或多行。
UML 文件是 UI 描述文件,可以用来创建于代码解耦的可定制界面。
UML 文件格式是纯文本的人类可读格式。UML 由 Element(元素)、注释和变量定义语句构成,每个元素占据一或多行。

## 坐标系统

坐标原点在进入活动页后下滑一屏后的左上角处,x轴向右,y轴向下
坐标原点在进入活动页后下滑一屏后的左上角处,`x` 轴向右,`y` 轴向下

屏幕宽度总是`2`,可以通过宽高比计算屏幕高度,参见内置变量一节。
屏幕宽度总是 `2`,可以通过宽高比计算屏幕高度,参见内置变量一节。

## 数据类型

- `Float`: 单精度浮点数
- `Rect`: 矩形。由`[left, top, width, height]`(分别是左上角`x`坐标、左上角`y`坐标、矩形宽度、矩形高度)定义,`Rect`在定义后可以访问一些只读属性,如:
- `Rect.l``Rect.x`: 左上角`x`坐标
- `Rect.t``Rect.y`: 左上角`y`坐标
- `Rect`: 矩形。由 `[left, top, width, height]`(分别是左上角 `x` 坐标、左上角 `y` 坐标、矩形宽度、矩形高度)定义,`Rect` 在定义后可以访问一些只读属性,如:
- `Rect.l``Rect.x`: 左上角 `x` 坐标
- `Rect.t``Rect.y`: 左上角 `y` 坐标
- `Rect.w`: 矩形宽度
- `Rect.h`: 矩形高度
- `Rect.r`: 右下角`x`坐标
- `Rect.b`: 右下角`y`坐标
- `Rect.cx`: 中心`x`坐标
- `Rect.cy`: 中心`y`坐标
- `Bool`: 布尔值。值是`true``false`,目前只能用于元素的属性中
- `Rect.r`: 右下角 `x` 坐标
- `Rect.b`: 右下角 `y` 坐标
- `Rect.cx`: 中心 `x` 坐标
- `Rect.cy`: 中心 `y` 坐标
- `Bool`: 布尔值。值是 `true``false`,目前只能用于元素的属性中
- `String`: 字符串。用双引号括起来的字符串,用于表示按钮行为、颜色、URL,具体如下:
- `Color`: 颜色。可以是十六进制RGB或ARGB颜色值(如`"#ff0000"``"#7fffffff"`)或颜色名(如`"red"`)。目前可用的颜色名有:
- `Color`: 颜色。可以是十六进制 RGB 或 ARGB 颜色值(如 `"#ff0000"``"#7fffffff"`)或颜色名(如 `"red"`)。目前可用的颜色名有:
- `"white"`
- `"black"`
- `"red"`
Expand All @@ -35,12 +35,12 @@ UML文件格式是纯文本的人类可读格式。UML由Element(元素)、
- `"gray"`
- `Action`: 按钮行为。可用的值有:
- `"join"`: 参与该活动
- `"open:url"`: 打开指定URL
- `"open:url"`: 打开指定 URL
- `URL`: 网址。

## 表达式

表达式是由`Float``Rect`、变量、运算符和函数组成的。表达式的值可以是`Float``Rect`类型的值。
表达式是由 `Float``Rect`、变量、运算符和函数组成的。表达式的值可以是 `Float``Rect` 类型的值。

### 运算符

Expand All @@ -50,12 +50,12 @@ UML文件格式是纯文本的人类可读格式。UML由Element(元素)、
- `*`:乘法
- `/`:除法
- `()`:括号,用于改变运算顺序
- `==`: 是否等于,返回`1``0`
- `!=`: 是否不等于,返回`1``0`
- `>`:是否大于,返回`1``0`
- `<`:是否小于,返回`1``0`
- `>=`:是否大于等于,返回`1``0`
- `<=`:是否小于等于,返回`1``0`
- `==`: 是否等于,返回 `1``0`
- `!=`: 是否不等于,返回 `1``0`
- `>`:是否大于,返回 `1``0`
- `<`:是否小于,返回 `1``0`
- `>=`:是否大于等于,返回 `1``0`
- `<=`:是否小于等于,返回 `1``0`

### 函数

Expand All @@ -67,48 +67,48 @@ UML文件格式是纯文本的人类可读格式。UML由Element(元素)、
- `exp(x)`: 指数函数
- `atan2(x)`: 反正切函数
- `ln(x)`: 自然对数函数
- `sig(x)`: 符号函数,`x``+0`或正数时返回`1`,为`-0`或负数时返回`-1`
- `step(x, y)`: 阶跃函数,`x < y``0`时返回`1`,否则返回`0`
- `sig(x)`: 符号函数,`x``+0` 或正数时返回 `1`,为 `-0` 或负数时返回 `-1`
- `step(x, y)`: 阶跃函数,`x < y``0` 时返回 `1`,否则返回 `0`
- `floor(x)`: 向下取整函数
- `ceil(x)`: 向上取整函数
- `round(x)`: 四舍五入函数
- `max(x, y...)`: 最大值函数
- `min(x, y...)`: 最小值函数
- `clamp(x, min, max)`: 将`x`限制在`min``max`之间
- `clamp(x, min, max)`: 将 `x` 限制在 `min``max` 之间

其中三角函数和反三角函数使用弧度制。

## 变量

变量是UML中可以被读取或者写入的值,定义方式如下:
变量是 UML 中可以被读取或者写入的值,定义方式如下:

```js
let name = value
```

定义一个变量`name`,其值为`value``value`可以是`Float``Rect`类型的值,或结果是`Float``Rect`类型的表达式。
定义一个变量 `name`,其值为 `value``value` 可以是 `Float``Rect` 类型的值,或结果是 `Float``Rect` 类型的表达式。

变量可以被重复定义,但只有最后一次定义的值会被使用。定义变量后,你可以在新建元素或定义其他变量时使用这个变量。

### 内置变量

UML内置了如下变量
UML 内置了如下变量

- `t`: 当前时间,单位为秒
- `top`: `实际高度 / 实际宽度`
- `o`: 滑动距离
- `joined`: 是否已经参与了该活动,参与了时值为`1`,否则为`0`
- `joined`: 是否已经参与了该活动,参与了时值为 `1`,否则为 `0`
- `$h`: 用户能滚动的最大高度

### 全局变量

全局变量是在UML文件的任何地方都可以被读取或者写入的变量。全局变量的定义方式如下:
全局变量是在 UML 文件的任何地方都可以被读取或者写入的变量。全局变量的定义方式如下:

```js
global name = @type
```

其中,`type`只能为`btn`。此后,你仍然可以通过`let`的方式写入全局变量,只有最后一次定义的值会被使用。
其中,`type` 只能为 `btn`。此后,你仍然可以通过 `let` 的方式写入全局变量,只有最后一次定义的值会被使用。

## 元素

Expand All @@ -118,79 +118,79 @@ global name = @type
type(attr1: value1, attr2: value2, ...) { Hello! }
```

其中,type为元素的类型,attrN和valueN分别为属性名称和属性值。不同类型的元素的属性也各不相同,其中一些是必填,会在介绍元素时具体标注。
其中,`type` 为元素的类型,`attrN``valueN` 分别为属性名称和属性值。不同类型的元素的属性也各不相同,其中一些是必填,会在介绍元素时具体标注。

元素的`id`属性为所有元素共有的可选属性,在元素被定义后,其`id`属性将自动对应一个表示该元素绘制范围的`Rect`变量。
元素的 `id` 属性为所有元素共有的可选属性,在元素被定义后,其 `id` 属性将自动对应一个表示该元素绘制范围的 `Rect` 变量。

后面的`{ Hello }`是可选内容,代表该元素的文字内容。只对`p`(段落元素)生效。
后面的 `{ Hello }` 是可选内容,代表该元素的文字内容。只对 `p`(段落元素)生效。

下面逐个介绍各类型的元素:

### 段落元素`p`
### 段落元素 `p`

```js
p(id, x, y, ax, ay, size, ml, mw, bl, c)
```

- `id`(选填): 元素ID
- `x`(选填,默认为`0`): 文本`x`坐标
- `y`(选填,默认为`0`): 文本`y`坐标
- `ax`(选填,默认为`0`): 文本横向对齐,[0, 1]间的浮点数。为0时,按照x坐标左对齐,为1时右对齐,0.5时居中
- `ay`(选填,默认为`0`): 文本纵向对齐,具体意义同上
- `size`(选填,默认为`1`): 文本大小
- `ml`(选填,默认为`false`): 文本是否多行渲染,只在设置了mw的条件下有效
- `id`(选填): 元素 ID
- `x`(选填,默认为 `0`): 文本 `x` 坐标
- `y`(选填,默认为 `0`): 文本 `y` 坐标
- `ax`(选填,默认为 `0`): 文本横向对齐,`[0, 1]` 间的浮点数。`0` 时,按照 `x` 坐标左对齐,为 `1` 时右对齐,`0.5` 时居中
- `ay`(选填,默认为 `0`): 文本纵向对齐,具体意义同上
- `size`(选填,默认为 `1`): 文本大小
- `ml`(选填,默认为 `false`): 文本是否多行渲染,只在设置了 `mw` 的条件下有效
- `mw`(选填): 文本最大宽度。在单行模式下,超出范围的文本将被省略;多行模式下将自动换行
- `bl`(选填,默认为`true`): 纵向对齐时是否按照基准线对齐
- `c`(选填,默认为`"white"`): 文本颜色
- `bl`(选填,默认为 `true`): 纵向对齐时是否按照基准线对齐
- `c`(选填,默认为 `"white"`): 文本颜色

### 图片元素`img`
### 图片元素 `img`

```js
img(id, url, r, c, t)
```

- `id`(选填): 元素ID
- `url`(必填): 图片URL,用双引号括起来
- `r`(必填): 图片显示的位置矩形,类型为`Rect`
- `c`(选填,默认为`"white"`): 在图片上叠加的颜色。若颜色半透明,图片也会半透明
- `t`(选填,默认为`cropCenter`): 图片的裁剪方式。可选值有:
- `id`(选填): 元素 ID
- `url`(必填): 图片 URL,用双引号括起来
- `r`(必填): 图片显示的位置矩形,类型为 `Rect`
- `c`(选填,默认为 `"white"`): 在图片上叠加的颜色。若颜色半透明,图片也会半透明
- `t`(选填,默认为 `cropCenter`): 图片的裁剪方式。可选值有:
- `cropCenter`: 从图片中心裁剪
- `inside`: 保持图片比例,使图片完全显示在`r`
- `fit`: 拉伸为`r`的大小
- `inside`: 保持图片比例,使图片完全显示在 `r`
- `fit`: 拉伸为 `r` 的大小

### 谱面合集元素`col`
### 谱面合集元素 `col`

```js
col(id, cid, r, rn, rh)
```

- `id`(选填): 元素ID
- `cid`(必填): 谱面合集ID
- `r`(必填): 谱面合集显示的位置矩形,类型为`Rect`
- `rn`(选填,默认为`4`): 一行显示的谱面数
- `rh`(选填,默认为`0.3`): 谱面高度
- `id`(选填): 元素 ID
- `cid`(必填): 谱面合集 ID
- `r`(必填): 谱面合集显示的位置矩形,类型为 `Rect`
- `rn`(选填,默认为 `4`): 一行显示的谱面数
- `rh`(选填,默认为 `0.3`): 谱面高度

### 按钮元素`btn`
### 按钮元素 `btn`

```js
btn(id, r, action)
```

- `id`(选填): 元素ID
- `r`(必填): 按钮显示的位置矩形,类型为`Rect`
- `id`(选填): 元素 ID
- `r`(必填): 按钮显示的位置矩形,类型为 `Rect`
- `action`(选填): 按钮的点击行为,可用的值参见数据类型一节

在元素被定义后,其`id`属性除了表示该元素绘制范围的`Rect`变量,还具有以下属性:
在元素被定义后,其 `id` 属性除了表示该元素绘制范围的 `Rect` 变量,还具有以下属性:

- `id.pressing`: 按钮是否正在被按下,被按下时值为`1`,否则为`0`
- `id.last`: 按钮上次被按下的时刻,从未被按下时值为`-1`
- `id.pressing`: 按钮是否正在被按下,被按下时值为 `1`,否则为 `0`
- `id.last`: 按钮上次被按下的时刻,从未被按下时值为 `-1`
- `id.count`: 按钮被按下的次数

## 注释

你可以用`#`开头的行添加注释,除了部分特殊格式的注释(称为注释表达式),注释不会被执行,可以用来提示当前代码的作用。
你可以用 `#` 开头的行添加注释,除了部分特殊格式的注释(称为注释表达式),注释不会被执行,可以用来提示当前代码的作用。

注释行在`#`后至少有一个字符,
注释行在 `#` 后至少有一个字符,

### 注释表达式

Expand All @@ -200,70 +200,70 @@ btn(id, r, action)
#>exp(attr1: value1, attr2: value2, ...)
```

其中,`exp`表示该表达式的类型,括号内的是该表达式的属性,是可选内容,`attrN``valueN`分别为属性名称和属性值。不同类型的表达式的属性也各不相同,其中一些是必填,会在介绍表达式时具体标注。
其中,`exp` 表示该表达式的类型,括号内的是该表达式的属性,是可选内容,`attrN``valueN` 分别为属性名称和属性值。不同类型的表达式的属性也各不相同,其中一些是必填,会在介绍表达式时具体标注。

下面逐个介绍各类型的注释表达式:

#### 结束表达式`#>pop`
#### 结束表达式 `#>pop`

```js
#>pop
```
注释表达式以行为单位,作用于数行内的元素、变量等,其作用范围是从表达式所在行开始到下一个`#>pop`表达式所在行结束。因此,任何其他表达式后面都必须跟一个`#>pop`表达式,表示结束当前表达式的作用范围。
注释表达式以行为单位,作用于数行内的元素、变量等,其作用范围是从表达式所在行开始到下一个 `#>pop` 表达式所在行结束。因此,任何其他表达式后面都必须跟一个 `#>pop` 表达式,表示结束当前表达式的作用范围。

#### 旋转表达式`#>rot`
#### 旋转表达式 `#>rot`

```js
#>rot(angle, cx, cy)
```

- `angle`(必填): 旋转角度,单位为弧度
- `cx`(必填): 旋转中心`x`坐标
- `cy`(必填): 旋转中心`y`坐标
- `cx`(必填): 旋转中心 `x` 坐标
- `cy`(必填): 旋转中心 `y` 坐标

#### 平移表达式`#>tr`
#### 平移表达式 `#>tr`

```js
#>tr(dx, dy)
```

- `dx`(选填,默认为`0`): 横向平移距离
- `dy`(选填,默认为`0`): 纵向平移距离
- `dx`(选填,默认为 `0`): 横向平移距离
- `dy`(选填,默认为 `0`): 纵向平移距离

#### 透明度表达式`#>alpha`
#### 透明度表达式 `#>alpha`

```js
#>alpha(a)
```

- `a`(选填,默认为`0): 透明度,取值范围为[0, 1],0为完全透明,1为完全不透明
- `a`(选填,默认为 `0`): 透明度,取值范围为 `[0, 1]``0` 为完全透明,`1` 为完全不透明

#### 矩阵表达式`#>mat`
#### 矩阵表达式 `#>mat`

```js
#>mat(x00, x01, x02, x03, x10, x11, x12, x13, x20, x21, x22, x23, x30, x31, x32, x33)
```

- `x00`(选填,默认为`0`): 矩阵第一行第一列的值
- `x01`(选填,默认为`0`): 矩阵第一行第二列的值
- `x02`(选填,默认为`0`): 矩阵第一行第三列的值
- `x03`(选填,默认为`0`): 矩阵第一行第四列的值
- `x10`(选填,默认为`0`): 矩阵第二行第一列的值
- `x11`(选填,默认为`0`): 矩阵第二行第二列的值
- `x12`(选填,默认为`0`): 矩阵第二行第三列的值
- `x13`(选填,默认为`0`): 矩阵第二行第四列的值
- `x20`(选填,默认为`0`): 矩阵第三行第一列的值
- `x21`(选填,默认为`0`): 矩阵第三行第二列的值
- `x22`(选填,默认为`0`): 矩阵第三行第三列的值
- `x23`(选填,默认为`0`): 矩阵第三行第四列的值
- `x30`(选填,默认为`0`): 矩阵第四行第一列的值
- `x31`(选填,默认为`0`): 矩阵第四行第二列的值
- `x32`(选填,默认为`0`): 矩阵第四行第三列的值
- `x33`(选填,默认为`0`): 矩阵第四行第四列的值
- `x00`(选填,默认为 `0`): 矩阵第一行第一列的值
- `x01`(选填,默认为 `0`): 矩阵第一行第二列的值
- `x02`(选填,默认为 `0`): 矩阵第一行第三列的值
- `x03`(选填,默认为 `0`): 矩阵第一行第四列的值
- `x10`(选填,默认为 `0`): 矩阵第二行第一列的值
- `x11`(选填,默认为 `0`): 矩阵第二行第二列的值
- `x12`(选填,默认为 `0`): 矩阵第二行第三列的值
- `x13`(选填,默认为 `0`): 矩阵第二行第四列的值
- `x20`(选填,默认为 `0`): 矩阵第三行第一列的值
- `x21`(选填,默认为 `0`): 矩阵第三行第二列的值
- `x22`(选填,默认为 `0`): 矩阵第三行第三列的值
- `x23`(选填,默认为 `0`): 矩阵第三行第四列的值
- `x30`(选填,默认为 `0`): 矩阵第四行第一列的值
- `x31`(选填,默认为 `0`): 矩阵第四行第二列的值
- `x32`(选填,默认为 `0`): 矩阵第四行第三列的值
- `x33`(选填,默认为 `0`): 矩阵第四行第四列的值

可以通过矩阵表达式实现元素的缩放、平移、旋转等变换。

#### 条件表达式`#>if`
#### 条件表达式 `#>if`

```js
#>if(condition)
Expand All @@ -275,14 +275,14 @@ btn(id, r, action)
#>fi
```

- `condition`(必填): 条件表达式,可以是任意表达式,当值为`0`表示假,否则表示真。
- `condition`(必填): 条件表达式,可以是任意表达式,当值为 `0` 表示假,否则表示真。

需要注意的是`#>if`并不适用`#>pop`来结束,而是使用`#>fi`
需要注意的是 `#>if` 并不适用 `#>pop` 来结束,而是使用 `#>fi`

#### 低版本兼容表达式`#>if-no-v2`
#### 低版本兼容表达式 `#>if-no-v2`

```js
#>if-no-v2
```

如果你的UML文件中使用了V2版本中没有的特性,可以在使用这个表达式显示部分元素,以提示使用低版本的Phira客户端的用户尽快升级
如果你的 UML 文件中使用了 V2 版本中没有的特性,可以在使用这个表达式显示部分元素,以提示使用低版本的 Phira 客户端的用户尽快升级

0 comments on commit bb5627f

Please sign in to comment.