• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 三方开源软件tex-hyphen
2
3## tex-hyphen简介
4tex-hyphen是一个用于TeX系统的断字模式库,它能够在多种语言中正确地将单词断行,以改善排版效果。
5
6来源:tex-hyphen
7URL:https://github.com/hyphenation/tex-hyphen
8版本:CTAN-2021.03.21
9License:多种组合
10
11## 引入背景陈述
12在多语言文档处理和排版中,正确的断字处理是至关重要的。tex-hyphen 提供了一套通用的断字模式,支持多种语言,为高质量的排版提供了基础保障。在OpenHarmony中,引入tex-hyphen可以显著提升多语言文档的排版质量。
13
14## 语种归类
15tex目录下包含了多个来自TeX hyphenations patterns的连字符规则,不同语种使用的开源许可证各不相同,整理归类:
16* MIT License
17* GPL,GPL 2
18* LGPL 1,LGPL 2.1
19* LPPL 1,LPPL 1.2,LPPL 1.3
20* MPL 1.1
21* BSD 3
22
23OHOS中使用以下语种资源,以下语种均使用友好型开源协议:
24* be - 白俄罗斯语(Belarusian)
25* cs - 捷克语(Czech)
26* cy - 威尔士语(Welsh)
27* da - 丹麦语(Danish)
28* de-1901 - 德语(German,1901orthography)
29* de-ch-1901 - 瑞士德语(SwissGerman,1901orthography)
30* el-monoton - 现代希腊语(ModernGreek,monotonic)
31* el-polyton - 现代希腊语(ModernGreek,polytonic)
32* en-gb - 英式英语(BritishEnglish)
33* en-us - 美式英语(AmericanEnglish)
34* es - 西班牙语(Spanish)
35* et - 爱沙尼亚语(Estonian)
36* fr - 法语(French)
37* ga - 爱尔兰语(Irish)
38* gl - 加利西亚语(Galician)
39* hr - 克罗地亚语(Croatian)
40* hu - 匈牙利语(Hungarian)
41* hy - 亚美尼亚语(Armenian)
42* id - 印度尼西亚语(Indonesian)
43* is - 冰岛语(Icelandic)
44* it - 意大利语(Italian)
45* ka - 格鲁吉亚语(Georgian)
46* lt - 立陶宛语(Lithuanian)
47* lv - 拉脱维亚语(Latvian)
48* mk - 马其顿语(Macedonian)
49* mn-cyrl - 蒙古语(Mongolian,Cyrillicscript)
50* nl - 荷兰语(Dutch)
51* pt - 葡萄牙语(Portuguese)
52* ru - 俄语(Russian)
53* sh-cyrl - 塞尔维亚-克罗地亚语(Serbo-Croatian,Cyrillicscript)
54* sh-latn - 塞尔维亚-克罗地亚语(Serbo-Croatian,Latinscript)
55* sk - 斯洛伐克语(Slovak)
56* sl - 斯洛文尼亚语(Slovenian)
57* sr-cyrl - 塞尔维亚语(Serbian,Cyrillicscript)
58* sv - 瑞典语(Swedish)
59* th - 泰语(Thai)
60* tk - 土库曼语(Turkmen)
61* tr - 土耳其语(Turkish)
62* uk - 乌克兰语(Ukrainian)
63* zh-latn-pinyin - 汉语拼音(Chinese,Pinyin)
64
65## 目录结构
66
67```
68third_party_tex-hyphen
69├── collaboration
70│   ├── original
71│   ├── repository
72│   └── source
73├── data/language-codes
74├── docs
75│   └── languages
76├── encoding
77│   └── data
78├── hyph-utf8
79│   ├── doc
80│   ├── source
81│   └── tex
82├── misc
83├── ohos
84│   ├── src
85│   └── hpb-binary
86├── old
87├── source
88├── tests
89├── TL
90├── tools
91└── webpage
92
93collaboration/       tex-hyphen官网依赖的js脚本、xml配置文件
94ohos/                OpenHarmony编译文件和hpb二进制文件
95data/                语种库
96docs/                项目的文档资料
97encoding/            包含编码相关的文件,用于处理不同字符集的编码问题。
98hyph-utf8/           TeX 的断字模式包,提供了以 UTF-8 编码的断字模式
99misc/                en-gb语种断词文件案例
100old/                 包含一些旧的断词模式文件,这些文件可能已经被更新或替换。
101source/              包含源代码文件,用于生成和处理断词模式。
102TL/                  tlpsrc资源文件,tlpsrc文件是TeX Live系统中的一个包源文件,用于描述TeX Live包的元数据
103tools/               包含一些工具脚本,用于辅助处理断词模式文件。
104webpage/             tex-hyphen官网主页,提供了关于 hyph-utf8 包的详细信息和资源
105```
106
107## 为 OpenHarmony 带来的价值
108
109**1.提高排版质量:** 通过引入 tex-hyphen,OpenHarmony 可以实现更为精准的断字处理,提高文档的可读性和美观度。
110**2.提升小屏设备体验:** 在小屏设备中使用断词模式,能够在相同区域内显示更多内容,提升阅读体验。
111
112## OpenHarmony中如何使用tex-hyphen
113
114### 1、编译hpb二进制
115#### 编译步骤
116打开终端(或命令提示符),导航到包含 [hyphen_pattern_processor.cpp](ohos%2Fsrc%2Fhyphen-build%2Fhyphen_pattern_processor.cpp) 文件的目录,并运行以下命令来编译代码:
117
118```
119cd ohos/src/hyphen-build/
120g++ -g -Wall hyphen_pattern_processor.cpp -o transform
121```
122上述命令说明:
123- g++: 调用 GCC 编译器。
124- -g: 添加调试信息。
125- -Wall: 启用所有警告。
126- hyphen_pattern_processor.cpp: 源代码文件。
127- -o transform: 指定输出的可执行文件名为 transform。
128
129#### 运行步骤
130编译完成后,可以使用以下命令来运行生成的可执行文件,并处理指定的 .tex 文件:
131```
132./transform hyph-en-us.tex ./out/
133```
134上述命令说明:
135- ./transform: 运行生成的 transform 可执行文件。
136- hyph-en-us.tex: 输入文件(待处理的 .tex 文件)。
137- ./out/: 输出目录(处理后的文件将存储在此目录中)。
138
139运行成功后,处理后的.hpb二进制文件将存储在 ./out/ 目录中。
140
141#### 批量编译
142- 依赖:
143```
144jq:json文件解析工具
145```
146
147- 通过json配置文件[build-tex.json](ohos%2Fbuild%2Fbuild-tex.json),配置需要编译的文件。
148```
149[
150    {
151        "filename": "example1.tex"
152    },
153    {
154        "filename": "example2.tex"
155    }
156]
157```
158**filename** :指定需要编译的tex文件名,文件须在 [tex](hyph-utf8%2Ftex%2Fgeneric%2Fhyph-utf8%2Fpatterns%2Ftex) 目录下
159
160build-tex.json文件中定义了全量支持语种,脚本会默认全量编译。开发者可通过修改build-tex.json来控制新增或者删除语种。
161例如:
162需要移除example2语种,修改结果如下:
163```
164[
165    {
166        "filename": "example1.tex"
167    }
168]
169```
170需要新增example3语种,修改结果如下:
171```
172[
173    {
174        "filename": "example1.tex"
175    },
176    {
177        "filename": "example2.tex"
178    },
179    {
180        "filename": "example3.tex"
181    }
182]
183```
184
185- 打开终端(或命令提示符),导航到包含 [build.sh](ohos%2Fbuild%2Fbuild.sh) 文件的目录,并运行以下命令来编译代码
186```
187chmod +x build.sh
188./build.sh
189```
190编译成功后,编译产物将会放置在./out_hpb目录下
191
192### 2、通过hpb解析单词断词位置
193#### 编译步骤
194打开终端(或命令提示符),导航到包含 [hyphen_pattern_reader.cpp](ohos%2Fsrc%2Fhyphen-build%2Fhyphen_pattern_reader.cpp) 文件的目录,并运行以下命令来编译代码:
195
196```
197cd ohos/src/hyphen-build/
198g++ -g -Wall hyphen_pattern_reader.cpp -o reader
199```
200上述命令说明:
201- g++: 调用 GCC 编译器。
202- -g: 添加调试信息。
203- -Wall: 启用所有警告。
204- hyphen_pattern_reader.cpp: 源代码文件。
205- -o reader: 指定输出的可执行文件名为 reader。
206
207#### 运行步骤
208编译完成后,可以使用以下命令来解析对应语种的单词:
209```
210./reader hyph-en-us.hpb helloworld
211```
212上述命令说明:
213- ./reader: 运行生成的 reader 可执行文件。
214- hyph-en-us.hpb: 输入文件(待解析的二进制文件)。
215- helloworld: 待解析的单词。
216
217运行成功后,日志中将会输出本次解析的单词断词信息。
218
219### 3、自动化验证
220通过[generate_report.py](ohos%2Ftest%2Fgenerate_report.py) Python脚本读取[report_config.json](ohos%2Ftest%2Freport_config.json)配置文件,可实现批量校验生成的二进制文件是否有效
221#### 准备
222- Python 3.x
223- transform和reader可执行文件,并将可执行文件放在脚本同一级目录
224- report_config.json配置文件
225#### 使用方法
2261. 准备配置文件
227首先,创建一个JSON格式的配置文件report_config.json,包含以下内容:
228```
229   {
230       "file_path": "path/to/tex/files",
231       "tex_files": [
232           {
233           "filename": "example.tex",
234           "words": ["word1", "word2", "word3", "word4", "word5", "word6", "word7", "word8", "word9", "word10"]
235           },
236       ...
237       ]
238   }
239```
240- file_path:TeX文件所在的目录路径。
241- tex_files:包含多个TeX文件及其对应的单词列表。
2422. 运行脚本
243在终端中运行以下命令:
244```
245python generate_report.py report_config.json
246```
2473. 日志文件
248脚本会在 report 目录下生成一个带有时间戳的子目录,包含以下日志文件:
249```
250match.log:记录匹配成功的结果。
251unmatch.log:记录匹配失败的结果。
252```