DreamGUI
诊断码

DUI1xxx · 词法

一串字符构不成任何记号。

本页由 scripts/diagnostics/sync.py 从插件的码表(EDreamUIDiagnosticCode)生成,卡片里的枚举名就是测试断言用的那个名字。

DUI1001

错误枚举名UnexpectedCharacter

一个不能作为任何记号开头的字符。

怎么会出现:词法器读到一个语法里没有任何记号以它开头的字符:单引号、$、?、[、]、反引号,或者落单的 &、|(只有 &&、|| 是运算符)。连成一串的这种字符只报一次,所以把 Source File 误指向一个根本不是 .dui 的文件时,你看到的是一条消息,而不是淹没其他问题的成千上万条。

Text Title {
    Text = 'Settings'
}

怎么改:字符串用双引号;如果整个文件都是乱码,检查 Blueprint 的 Source File 指向了哪里。

DUI1002

错误枚举名UnterminatedString

一个在行尾之前没有遇到右引号的字符串。

怎么会出现:字符串不能跨行,从左引号到行尾都没有一个未转义的 " 就报这个码。常见原因是漏了右引号,或者字符串里的引号没有写成 \"。

Text Title {
    Text = "Settings
}

怎么改:补上右引号;字符串里的引号写 \",换行写 \n。

DUI1003

错误枚举名UnterminatedComment

一个直到文件末尾都没有遇到 */ 的 /*。

怎么会出现:块注释从 /* 开始,到第一个 */ 结束;文件读完了还没遇到,后面的整个文件都被当成了注释。

/* 设置页
Widget Root {
    Text Title { Text = "Settings" }
}

怎么改:在注释该结束的地方补上 */;只注释一行时用 // 更不容易出这种错。

DUI1004

错误枚举名MalformedNumber

一个读不成数字的数字:两个小数点、末尾的点,或者粘了一个单位(24px)。

怎么会出现:以数字开头,却带着数字里不该有的部分:1.2.3、3.、指数后没有数字的 1e、后面什么都没跟的 -,或者紧贴着的字母,比如习惯了 CSS 写出来的 24px。这些都被吞进同一个记号再报,免得剩下的 px 被当成一个节点头,再凭空多出一条不相干的错误。

Text Title {
    FontSize = 24px
}

怎么改:写纯数字,比如 -12、0.95、1e-45;单位不写,数值按属性自身的单位读。

DUI1005

错误枚举名MalformedHexColor

一个十六进制位数不是 3、4、6 或 8 的 # 颜色。

怎么会出现:颜色写成 #RGB、#RGBA、#RRGGBB 或 #RRGGBBAA,按 sRGB 读;其他位数(比如少敲了一位的 #FF660),或者 # 后面混进了不是十六进制数字的字符,都报这个码。

Text Note {
    Color = #FF660
}

怎么改:补齐位数,比如 #FF6600;要带透明度就写 8 位,比如 #FF6600CC。

DUI1006

错误枚举名IdentifierTooLong

一个比 FName 能容纳的更长的名字。

怎么会出现:这门语言写下的每个名字(节点 id、属性名、处理函数名、循环变量)最终都会变成某处的一个 FName,而 FName 遇到超长的字符串(超过 NAME_SIZE 允许的 1023 个字符)不会返回错误,而是直接断言,把编辑器一起带走。所以词法器在记号这一层就拦下它,一条规则覆盖名字能出现的每个位置。没写 id 的节点,如果解析器为它拼出的 id 超长,也报这个码。

怎么改:把名字改短;如果超长的是生成的 id,给这个节点或它上面的某个节点写一个 id。

DUI1007

错误枚举名AssetPathTooLong

一个比 FName 能容纳的更长的资产路径。

怎么会出现:加载资产时,路径会被拆成包名、对象名这些 FName,其中一个超长时引擎同样会停掉编辑器而不是报错(见 DUI1006)。裸写的路径在词法阶段拦下,写成字符串的路径在构建控件树时拦下。

怎么改:检查路径是不是拼接出错或者被粘贴了两遍;真实的资产路径不会这么长。

本页目录