Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ayaka Script 与国际化支持 #12

Closed
Berrysoft opened this issue Sep 19, 2022 · 2 comments · Fixed by #13
Closed

Ayaka Script 与国际化支持 #12

Berrysoft opened this issue Sep 19, 2022 · 2 comments · Fixed by #13

Comments

@Berrysoft
Copy link
Contributor

Ayaka Script 是完全没有国际化支持的。与之相关的资源文本虽然有国际化支持,但是在执行脚本时只是将当前语言的资源字典以及 fallback 传给了解释器。这相当于没有国际化支持。

同时,Ayaka Script 的嵌入方式非常自由,因此给国际化也带来了很大的压力。

我现在计划分离 Text 的 parsing 步骤,将 Action 分成两部分,一部分 ActionParams 是不变的属性与计算好的结果,不随语言变化;一部分 Action 在需要显示的时候即时获取,以保证所有的显示内容与当前语言匹配。但是由于 Ayaka Script 没有国际化支持,这个重构面临着某些强耦合。

代码示例1:

- \exec{ format.fmt(#r1, 123,456) }

提问:如果 r1 在不同的语言下有不同的值, format.fmt 在何时执行?

代码示例2:

- \exec{ format.fmt("{}", random.rnd(10)) }

提问:如何保证 random.rnd 只执行一次?

代码示例3:

- a = \exec{ $a }
- b = \exec{ $b += 1; $b }

提问:其它语言的文本怎么写?

我们也许需要一种新的语法来解决脚本语言的问题。

@Berrysoft
Copy link
Contributor Author

@LaoshuBaby @Akarinnnnn

@Berrysoft
Copy link
Contributor Author

Berrysoft commented Sep 19, 2022

解决方案1

Ayaka Script 更改

  • 不允许引用资源文本

伪 TeX 命令更改

  • 删除 \exec
  • 增加 \var 用来引用 Ayaka Script 的全局变量

增加概念

行类型与行插件。

在之前的格式中,段落的每一行只能是文本。现在增加允许新的类型:exec、switch 与自定义类型(由行插件支持)。

如何解决上述问题?

代码示例1

脚本不允许引用资源文本,这样的写法无效。

代码示例2

- exec: $v = random.rnd(10)
- \var{v}

解释:exec 是独立出来的代码行,代码行只能执行代码,计算出来的结果没有意义。如果想要在文本中显示出来,应该赋值给变量,然后利用 \var 命令。

如果有多个语言版本,那么 exec 行不需要重复写,但是 \var{v} 需要显式指定。

后续也许会考虑更好的办法恢复这里的格式化功能。这个功能的主要难点在于:

  • 格式指定,用什么 parser
  • 如何编号

代码示例3

对于基础语言

- a = \var{a}
- exec: $b += 1
- b = \var{b}

对于其它语言

- a = \var{a}
- # exec: $b += 1
- b = \var{b}

exec 行

补充一点:非基础语言的翻译文本不应该出现 exec 行,但是不会跳过(后果自负……?)

考虑到 indexing 比较困难,无法翻译的 exec 行在其它语言文本中仍应该有一个占位符

-

switch 行

暂定如下语法:

- switches:
  - Switch 1 || $end = true
  - Switch 2 || $end = false
  - Switch 3 | false

使用竖线 | 分割一行为三部分,第一部分为文本,第二部分为是否有效,第三部分为执行的代码。其翻译必须简写:

- switches:
  - 选项 1
  - 选项 2
  - 选项 3

如果不写就 fallback。

行插件

行插件可以解决一些 TeX 命令控制状态很难写的问题。例如更换背景图的 \bg{0} 命令,现在可以写为

- bg: 0

播放视频的 \video{0} 也可以写为

- video: 0

而 basictex 插件中的各种命令仍然保持不变,因为它们不是控制状态而是计算文本。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant