Skip to content

Commit

Permalink
style: 清理代码
Browse files Browse the repository at this point in the history
  • Loading branch information
KonghaYao committed Dec 28, 2024
1 parent 828df8b commit 9b8bdac
Show file tree
Hide file tree
Showing 8 changed files with 42 additions and 36 deletions.
3 changes: 0 additions & 3 deletions .babelrc

This file was deleted.

3 changes: 1 addition & 2 deletions .npmrc
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
registry=https://registry.npmmirror.com
# registry=https://mirrors.cloud.tencent.com/npm/
registry=https://registry.npmmirror.com
13 changes: 6 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@

`cn-font-split` 不仅支持中文,针对于中韩日文字、少数民族文字、阿拉伯文等皆有优化,可以根据实际字体包内字符进行智能地分包。

- 🚀 `WebAssembly` 或者 `Rust FFI` 实现, 原生运行分包,进入秒级构建;
- 💻 坚持 Web 平台为基底,兼容性极强。浏览器、Node、Deno、CICD 环境,统统可以运行。Rust、JS、Python 多语言使用。
- 🔧 功能齐全完备,支持生成文字图片预览,支持完整全字符,支持复杂字形,支持可变字体!
- ⛰️ 自研 Rust 工具,构建文本 SVG 引擎,独立渲染文本图像。
- 🚄 **我们有前端编译器插件啦! —— [vite-plugin-font](https://npmjs.com/package/vite-plugin-font), 支持 Vite、Nuxt、Next、Webpack、Rspack,快速嵌入你的前端工具链。**
- 🚀 `WebAssembly` 或者 `Rust FFI` 实现, 原生运行分包,进入秒级构建;
- 💻 坚持 Web 平台为基底,兼容性极强。浏览器、Node、Deno、CICD 环境,统统可以运行。Rust、JS、Python 多语言使用。
- 🔧 功能齐全完备,支持生成文字图片预览,支持完整全字符,支持复杂字形,支持可变字体!
- ⛰️ 自研 Rust 工具,构建文本 SVG 引擎,独立渲染文本图像。
- 🚄 **我们有前端编译器插件啦! —— [vite-plugin-font](https://npmjs.com/package/vite-plugin-font), 支持 Vite、Nuxt、Next、Webpack、Rspack,快速嵌入你的前端工具链。**

> [Opentype Feature 支持情况](/packages/test/SUPPORT_FEATURE.md) 支持 95 | 部分支持 9| 等待测试 20
Expand All @@ -32,7 +32,6 @@

如果您想要支持某些语言,可以提交 Issues 或者 PR。


### 新版本功能

1. ✅ 🚀 原生构建支持,速度进入秒级时代(2MB 字体只需要 50ms)!
Expand All @@ -43,7 +42,7 @@
6. ✅ 🔔 支持 OTF 格式字体打包,支持复杂字形渲染。
7. ✅ 🏞️ 字体预览图生成
8. ✅ ⌨️ 支持 Nodejs、Deno、Bun、Browser,跨平台随处可使用、构建产物一致!
9. ✅ 🥳 不止中文,只要是包内的字符,统统分包
9. ✅ 🥳 不止中文,只要是包内的字符,统统分包
10. ✅ 🏞️ 支持自动识别可变字体字重

## 感谢
Expand Down
45 changes: 28 additions & 17 deletions Structure.md
Original file line number Diff line number Diff line change
@@ -1,45 +1,56 @@
# cn-font-split Rust Version!
# cn-font-split Rust Version

## cn-font-split 代码架构

cn-font-split 是一个复杂的字体分包系统,整体架构分为三个主要部分:core、message_channel 和 wrapper。

### 1. Core
### 1. Core 核心层

core 是 cn-font-split 的核心部分,负责实际的字体分包操作。它通过接收回调函数作为参数,实现异步数据返回。core 内部主要包含以下三个核心逻辑模块:
core 是 cn-font-split 的核心部分,负责实际的字体分包操作。它通过接收回调函数作为参数,实现异步数据返回。

- 预分包(pre_subset):在进行实际分包操作之前,预处理字体数据,进行多语言的分包优化,确定分包内字符。
- 批量分包(run_subset):处理大批量字体数据的分包操作,确保在高负载情况下依然能够高效运行。
- 链接分包(link_subset):将分包后的字体数据进行链接和整合,生成最终的分包结果。
> font_split 现在为同步实现,速度足够快。异步数据返回这种形式可兼容不同的信道层实现。
core 内部主要包含以下三个核心逻辑模块:

- 预分包(pre_subset):在进行实际分包操作之前,预处理字体数据,进行多语言的分包优化,确定分包内字符。
- 批量分包(run_subset):处理大批量字体数据的分包操作,确保在高负载情况下依然能够高效运行。
- 链接分包(link_subset):将分包后的字体数据进行链接、整合和汇报,生成最终的分包结果。

这些操作基于 harfbuzz 和 opentype 库实现,确保了对字体操作的高效和准确。

### 2. Message Channel
### 2. Message Channel 信道层

message_channel 是 cn-font-split 与外部系统交互的桥梁,基于 protobuf(Protocol Buffers)实现。所有的交互接口通过 cn-font-proto 库进行定义和创建。

message_channel 是 cn-font-split 与外部系统交互的桥梁,基于 protobuf(Protocol Buffers)实现。所有的交互接口通过 cn-font-proto 库进行定义和创建。protobuf 提供了二进制数据传输和自动代码生成功能,保障了接口的稳定性和可扩展性。
protobuf 在现实实现中,有两种使用方式:

> 需要注意的是,在 Rust 项目之间,message_channel 仅借用了 protobuf 生成的结构定义,并不需要构建为二进制格式。只有在 Rust 与其他语言交互时,才会使用到二进制序列化。
1. 结构体传递: Rust 程序间进行沟通时,直接采用 protobuf 代码生成的定义。
2. 二进制数据传递:不同语言之间,通过 protobuf 的,和任何一种可以传递二进制的信道进行数据同步。

### 3. Wrapper
### 3. Wrapper 适配层

wrapper 是 cn-font-split 对外提供的功能接口,支持多种语言调用和不同的部署方案。wrapper 主要包括以下几种实现:

- ✅ gRPC Wrapper:基于 HTTP/2 协议,提供独立的字体构建服务。gRPC 方案简单易用,适用于所有支持 gRPC 的项目。
- ✅ FFI Wrapper:通过标准的 C API 调用 Rust 生成的二进制动态链接库,使用 protobuf 解析二进制数据,支持双边语言通信。
- ✅ CLI Wrapper:提供一个命令行接口,完全由 Rust 编写,用户可以通过简单的命令完成基础的字体分包操作。
- ✅ WASI Wrapper:基于 WebAssembly System Interface (WASI),支持在多种操作系统环境中运行,提供更广泛的部署可能性。浏览器可以通过 WASI(@tybys/wasm-util
)实现完成接入。
- ✅ gRPC Wrapper:基于 HTTP/2 协议,提供独立的字体构建服务。gRPC 方案简单易用,适用于所有支持 gRPC 的项目。
- ✅ FFI Wrapper:通过标准的 C API 调用 Rust 生成的二进制动态链接库,使用 protobuf 解析二进制数据,支持双边语言通信。
- ✅ CLI Wrapper:提供一个命令行接口,完全由 Rust 编写,用户可以通过简单的命令完成基础的字体分包操作。
- ✅ WASI Wrapper:基于 WebAssembly System Interface (WASI),支持在多种操作系统环境中运行,提供更广泛的部署可能性。
- 浏览器可以通过 WASI(@tybys/wasm-util)实现完成接入。

## 命名规范
## 开发规范

### 命名规范

1. Rust 项目统一采用 snake_case, 会有 IDE 相应提示。

2. 包名统一用 `-` 链接,而不是 `_`

## Dev
### 开发环境

为统一不同开发环境,采用 VSCode Dev Container 方法

开发使用设备最好 MacOS 8GB、Windows 16GB 以上, 具备 Docker 环境,一键进入开发状态!

如果遇到某些依赖没安装,可以参考 [Developer.md](./Developer.md)

### 测试流程
4 changes: 2 additions & 2 deletions packages/wasm-edge/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@

这个项目将构建出 cn-font-split 的 wasm32-wasip1 目标,可以运行在浏览器上。

构建需要依赖 wasi-sdk 和 wasm-opt, 安装方式
构建需要依赖 wasi-sdk 和 wasm-opt, 安装脚本在这里

`.devcontainer/wasi-install.sh`
`.devcontainer/wasm-opt-install.sh`

项目构建方式

`build-wasi.sh`
`build-wasi.sh`
6 changes: 3 additions & 3 deletions src/pre_subset/features/gsub.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ pub fn analyze_gsub(
font_file: &mut Cursor<&Vec<u8>>,
) -> Vec<Vec<u16>> {
let temp: Result<Option<GlyphSubstitution>, std::io::Error> =
font.take(font_file);
font.take(font_file);
// 国标宋体,解析就报错,所以干脆先不解析
if temp.is_err() {
error!("{}", temp.unwrap_err());
Expand Down Expand Up @@ -181,13 +181,13 @@ pub fn analyze_gsub(
})
.collect()
}
ChainedContext::Format3(ctx) => {
ChainedContext::Format3(_ctx) => {
// println!("??? {:?}\n", context);
// ! BUG 不知为何有这种规则导致匹配贼多
// coverages 是触发的glyph
// forward_coverages 和 backward_coverages 是左右匹配的 glyph
// 反正所有的字形都是相关的,合并到一块
let mut result: Vec<u16> = vec![];
let result: Vec<u16> = vec![];
// collect_glyph_id_from_format_1_and_2(
// &ctx.coverages,
// &mut result,
Expand Down
2 changes: 1 addition & 1 deletion src/pre_subset/plugin.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ pub fn add_remain_chars_plugin(
/// 把数量低于某个值的包,重新规划,缩减碎片分包数
pub fn reduce_min_plugin(
subsets: &mut Vec<BTreeSet<u32>>,
remaining_chars_set: &mut BTreeSet<u32>,
_remaining_chars_set: &mut BTreeSet<u32>,
_ctx: &mut PreSubsetContext,
) {
// TODO 抽取为定义
Expand Down
2 changes: 1 addition & 1 deletion src/run_subset.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ use log::{info, warn};
use rayon::iter::{
IndexedParallelIterator, IntoParallelRefIterator, ParallelIterator,
};
use std::collections::{BTreeMap, BTreeSet};
use std::collections::BTreeSet;
use std::time::Instant;
use woff::version2::compress;

Expand Down

0 comments on commit 9b8bdac

Please sign in to comment.