@evenrealities/pretext

中文文档
0.1.4发布于 2026/04/16MITTypeScriptES Module零依赖近 30 天下载 12.9万

Even Realities G2 眼镜的像素精确字体测量库

中文使用文档
文档目录13 节
  1. 特征
  2. 安装
  3. API 密码
  4. getTextWidth(text: string): number
  5. measureTextWrap(text: string, maxWidth: number): MeasureTex…
  6. pxTruncate(text: string, maxPx: number): string
  7. getAdvW(cp: number): number
  8. 显示引用
  9. 如何运作
  10. 更改日志
  11. 0.1.4 (中文(简体) )
  12. 1.1.3 国家
  13. 0.1.2 (中文(简体) )

@ everyreality/ pretext

像素精确字体测量库 乃至真实 G2 智能眼镜(EvenHub specially). 预测精确的文本布局尺寸与眼镜固件中使用的LVGL渲染引擎相匹配,因此可以精确地大小UI容器而无需猜测. 灵感来自 借口。 。 。 .

说明: 在多数情况下,测量方法都经过人工比较和对照实际的眼镜渲染进行核实,但在预测与固件输出不同的情况下,边缘情况可能存在. 特别是,对于固件字体中不存在的字符,结果可能取消,因为固件和这个库在某些情况下可能会不同处理缺失的格来克.

特征

  • 文字测量 ——多行布局预测并用词包
  • 克宁语 ——使用固件精确公式的每个字符配对调整
  • 宽字符支持 ——拉丁语,西里尔语,希腊语,CJK (中文,日语,朝鲜语),Bopomofo

安装

npm install @evenrealities/pretext

API 密码

getTextWidth(text: string): number

返回字符串的单行像素宽度,并应用克宁.

import { getTextWidth } from '@evenrealities/pretext';

const width = getTextWidth('Hello, world!');
// => 79 (pixels)

measureTextWrap(text: string, maxWidth: number): MeasureTextResult

测量给定像素宽度范围内多行文字布局. 处理空格和连字符的字包, CJK 边界断开, 清晰的新线, 以及不存在断开机会时的硬断开.

maxWidth 应该是 内部内容宽度 ——如果你的容器有垫子或边框,在呼叫前减去. 回来的 height 是纯文本高; 添加自己的粘贴/边框以获得最后容器大小.

import { measureTextWrap } from '@evenrealities/pretext';

const result = measureTextWrap('The quick brown fox jumps over the lazy dog', 200);
// => {
//   lineCount: 2,
//   height: 54,        // lineCount * 27 (line height)
//   lineWidths: [192, 96]
// }

// With padding + border:
const pad = 8, border = 2;
const inner = 300 - 2 * (pad + border);  // 280px available for text
const m = measureTextWrap('Hello world', inner);
const containerHeight = m.height + 2 * (pad + border);

参数:

参数类型默认说明
textstring—— 说要测量的字符串
maxWidthnumber—— 说文本以像素为单位的现有宽度( subtract dadding/ border first)

返回类型 :

外地类型说明
lineCountnumber包装后行数
heightnumber文字高度( 以像素计 )lineCount * 27(中文(简体) )
lineWidthsnumber[]每行像素宽度

pxTruncate(text: string, maxPx: number): string

将字符串切入像素预算, 附加 '...' 如果需要的话。 返回已匹配的原始字符串。 使用二进制搜索来高效地安装,并且是代码-意识(不会像emoji那样打破代对).

import { pxTruncate } from '@evenrealities/pretext';

const truncated = pxTruncate('Hello, world!', 50);
// => 'Hell...'

getAdvW(cp: number): number

返回 1/16px 单位中一个代码点的原始提前宽度(无克宁,无四舍五入)。 遵循字体倒转链: eurroster - > eurroster crylgrek - > cn. 主要用于调试或构建自定义测量逻辑.

显示引用

G2眼镜有一个 576 x 288 像素 lVGL 提供的显示,固定行高为 27px (英语)。 。 。 .

如何运作

库内嵌从G2固件中使用的LVGL C字体文件中提取出字体度量衡. 它复制了固件的文本塑造管道:

  1. 格莱弗搜索 ——通过三相倒转链(拉丁语->西里尔语/希腊语->CJK)解决每个代码点
  2. 克宁语 使用固件公式应用配对调整: (kern_value * kern_scale) >> 4
  3. 每格氏圆形 ——每个前置宽度被四舍五入到像素上((adv + kern + 8) >> 4),与LVGL的行为完全匹配
  4. 换行 空格、连字符和CJK边界断开,硬断开作为倒入

注:如果固件字体的度量衡发生变化,则必须更新此库以匹配.

更改日志

0.1.4 (中文(简体) )

  • 添加 Emoji 字体

1.1.3 国家

  • 断开 : 删除 containerPadding 参数来自 measureTextWrap函数现在测量纯正文本——调用者应从中减去平板字/边框 maxWidth 在回电前再加回去 height。这避免了内部处理地标但边界宽度不连贯的情况.
  • 断开 : 删除 measureList。它的逻辑是微不足道的(项目计分×40px,加上基本宽度比较),呼叫者可以与 getTextWidth。 。 。 .

0.1.2 (中文(简体) )

  • 首次公开发布 getTextWidth, (中文(简体) ), measureTextWrap, (中文(简体) ), pxTruncate, (中文(简体) ), measureList,以及 getAdvW。 。 。 .

版本与发布记录

@evenrealities/pretext 共发布 4 个版本,首次发布于 2026/04/09;过去 12 个月发布了 4 个版本。

版本发布日期距今
0.1.4latest2026/04/166 个月前
0.1.32026/04/137 个月前
0.1.22026/04/097 个月前
0.1.12026/04/097 个月前

关于 @evenrealities/pretext 的常见问题

@evenrealities/pretext 是什么?

Even Realities G2 眼镜的像素精确字体测量库

如何安装 @evenrealities/pretext?

在项目目录运行 npm install @evenrealities/pretext,或使用 pnpm add / yarn add / bun add。

@evenrealities/pretext 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@evenrealities/pretext 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@evenrealities/pretext 可以商用吗?

@evenrealities/pretext 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@evenrealities/pretext 的下载量有多少?

根据 npm 官方下载统计,@evenrealities/pretext 在 2026/10/14 – 2026/11/12 这 30 天内被下载 128,566 次,日均约 4,286 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@evenrealities/pretext 还在维护吗?

最新版本 0.1.4 发布于 2026/04/16(6 个月前);至今共发布 4 个版本,其中过去 12 个月发布了 4 个;首次发布于 2026/04/09。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。