文本布局命令

该命令执行完整的文本布局,并输出详细的布局信息。这可以帮助你分析文本布局。


格式:

/modernui text layout [message]

其中message为多样式文本组件


输出内容

执行后,系统向指令执行者分别发送渲染后的文本组件及其布局信息,其中:布局信息文本本身使用等宽字体布局;布局信息文本会输出到日志和控制台。布局信息分成下面几个部分:

字符信息

这里包含文本组件的所有子内容,在去除格式控制码并连接后的原始字符串数据和上下文分析。分别是按照逻辑顺序(logical order),按UTF-16 BE编码的16进制Unicode字符输出(每个字符称为码元code unit);它们在文本布局中的行进量(advance);字素簇和行边界信息。

首先显式码元的总个数;随后每组最多输出8个码元,每组包含下面几行:

第一行开头显示16进制下,首个码元的索引,随后按16进制 \uXXXX 的格式输出码元的值。

第二行显示每个码元的行进量(advance),即行文过程中,一个字符到下一个字符的移动的量,单位为MC比例无关像素,保留一位小数。行进量只提供在每个字素簇的首个码元,若字素簇包含多个码元,则后面的码元行进量恒为0。注意:行进量与文本的渲染宽度无关。

第三行显示分断边界信息,有三种:

  1. LB(line break),行分断;若执行文本换行算法,则文本只能在行边界处换行,其余位置不可换行;行边界必然是字素簇边界;

  2. GB(grapheme-cluster break),字素簇分断;字素簇是文字系统中被认为是一个“字符”的整体,可以由多个码元混合布局组成;例如一个Emoji可能包含10个以上的码元,但是只能被认为是1个字符;例如在文本输入框中使用左右箭头移动光标时,Modern UI 会为您移动整个字素簇;若一行内没有行分断,则换行算法会在字素簇边界进行换行;

  3. NB(non-breaking),非分断;顾名思义,不可分断;前后码元必须视为一个整体,否则会出现文本布局/排版错乱。

注意,分断信息仅显示在两个码元中间,最开头必然是字素簇边界,结尾必然是行边界(也是字素簇边界)。


字形信息

这里包含整个文本执行文本布局后的字形信息,以及它们的样式。分别是按照视觉顺序(visual order),视觉上从左到右的字形码(glyph code);相对位置(position X,Y);字形样式位域。

首先显式字形的总个数;随后每组最多输出4个字形,每组包含下面几行:

第一行开头显示16进制下,首个字形的索引,随手按16进制 FT SL GLYH 的格式输出字形码的值。

  1. 高8位FT为字体表中的索引;

  2. 随后8位SL为逻辑字体的槽位,对于物理字体恒为0;

  3. 低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"}

短评加载中..