该命令执行完整的文本布局,并输出详细的布局信息。这可以帮助你分析文本布局。
格式:
/modernui text layout [message]
其中message为多样式文本组件
输出内容
执行后,系统向指令执行者分别发送渲染后的文本组件及其布局信息,其中:布局信息文本本身使用等宽字体布局;布局信息文本会输出到日志和控制台。布局信息分成下面几个部分:
字符信息
这里包含文本组件的所有子内容,在去除格式控制码并连接后的原始字符串数据和上下文分析。分别是按照逻辑顺序(logical order),按UTF-16 BE编码的16进制Unicode字符输出(每个字符称为码元code unit);它们在文本布局中的行进量(advance);字素簇和行边界信息。
首先显式码元的总个数;随后每组最多输出8个码元,每组包含下面几行:
第一行开头显示16进制下,首个码元的索引,随后按16进制 \uXXXX 的格式输出码元的值。
第二行显示每个码元的行进量(advance),即行文过程中,一个字符到下一个字符的移动的量,单位为MC比例无关像素,保留一位小数。行进量只提供在每个字素簇的首个码元,若字素簇包含多个码元,则后面的码元行进量恒为0。注意:行进量与文本的渲染宽度无关。
第三行显示分断边界信息,有三种:
LB(line break),行分断;若执行文本换行算法,则文本只能在行边界处换行,其余位置不可换行;行边界必然是字素簇边界;
GB(grapheme-cluster break),字素簇分断;字素簇是文字系统中被认为是一个“字符”的整体,可以由多个码元混合布局组成;例如一个Emoji可能包含10个以上的码元,但是只能被认为是1个字符;例如在文本输入框中使用左右箭头移动光标时,Modern UI 会为您移动整个字素簇;若一行内没有行分断,则换行算法会在字素簇边界进行换行;
NB(non-breaking),非分断;顾名思义,不可分断;前后码元必须视为一个整体,否则会出现文本布局/排版错乱。
注意,分断信息仅显示在两个码元中间,最开头必然是字素簇边界,结尾必然是行边界(也是字素簇边界)。
字形信息
这里包含整个文本执行文本布局后的字形信息,以及它们的样式。分别是按照视觉顺序(visual order),视觉上从左到右的字形码(glyph code);相对位置(position X,Y);字形样式位域。
首先显式字形的总个数;随后每组最多输出4个字形,每组包含下面几行:
第一行开头显示16进制下,首个字形的索引,随手按16进制 FT SL GLYH 的格式输出字形码的值。
高8位FT为字体表中的索引;
随后8位SL为逻辑字体的槽位,对于物理字体恒为0;
低16位GLYH为物理TrueType字体定义的字形码,对于缺少字形恒为0。
第二行显示每个字形在该布局中的相对位置,为(x,y)对,单位为MC比例无关像素,分别保留一位小数。
第三行显示每个字形的字符样式,不包含颜色信息(颜色在上面的渲染结果呈现),可能包含:
B:粗体;I:斜体;U:下划线;S:删除线;O:混淆字符;E:彩色表情符号;M:位图字体
字体表
这里包含该布局中使用的所有字体(家族),总数不超过255。
每行以 XX:NAME 格式显示一个字体,XX为16进制下字体的索引,详见字形信息里的FT;NAME为字体的家族名,永远为英文原名。
最后一行显示整个布局的总行进量(total advance),单位为MC比例无关像素,保留所有小数。
样例:
/modernui text layout "👨🏻🔧"
/modernui text layout {"text":"হ্যালো","bold":true}
/modernui text layout {"text":"Hello World","font":"jetbrains-mono-medium"}
资料分类: | 命令 |