10 个版本 (2 个稳定版)
1.1.0 | 2023年10月3日 |
---|---|
1.0.0 | 2022年11月19日 |
0.9.1 | 2022年11月12日 |
0.8.0 | 2022年11月8日 |
0.3.0 | 2021年4月1日 |
#207 in 文本处理
每月下载 23 次
245KB
4.5K SLoC
滕瓦语
将拉丁文文本自动转换为 Unicode 私用区域中的滕瓦语码点。主要针对古典昆雅模式,但也支持贝尔兰德和刚多尔的辛达林模式。这允许排版 J.R.R. 托尔金的多种精灵语言文本。
使用的码点是 Free Tengwar Font Project 中定义的,基于 ConScript Unicode Registry 中的映射,并且只有安装了包含它们的字体才能正确渲染。对于不需要安装任何字体的图像示例,请参阅页面底部。
该项目提供了一个可执行程序和一个软件库。本页面的其余部分描述了可执行程序。有关将其用作库的信息,请参阅 库文档。
安装
安装了 Cargo 后,以下命令将自动从 crates.io 构建 和安装
cargo install tengwar
用法
直接运行时,读取所有命令行参数,并以空格分隔打印出来
> tengwar "Elen síla lúmenn' omentielvo :"
> tengwar "Utúlie'n aurë!, Aiya Eldalië ar Atanatári , utúlie'n aurë!:"
如果没有提供参数,则从标准输入读取,逐行打印转写结果。所有输入均假定为 UTF-8 编码,输出也将是 UTF-8 编码。
运行 tengwar -h
可查看程序的简要说明,而运行 tengwar --help
可获得更详细的帮助文本。
模式
可以通过命令行开关选择替代的“模式”
> tengwar --beleriand "Ennyn Durin aran Moria :. pedo mellon a minno :"
> tengwar --gondor "Ennyn Durin aran Moria :. pedo mellon a minno :"
可以通过tengwar -h
查看所有可用模式的全列表。
数字
数字与字母文本的解析方式大不相同。这是因为Tengwar中,最低有效位位于左侧,而数字通常使用12进制系统。但是,将数字作为一个整体进行解析的要求,确实允许在行内指定一些格式。普通的数字很简单
> tengwar "9"
默认表示形式是12进制,即12进制,这是精灵的习惯
> tengwar "22"
在数字前加上#
将强制以十进制,即10进制表示数字
> tengwar "#22"
在数字后加上@
将在后面附加后缀以指定序数,例如“第二个”而不是“两个”
> tengwar "Laurelin nánë i 2@ alda"
在1到24之间的数字后加上#
将完全避免使用典型的数字,而是使用常规的Tengwar作为序列的索引。Christopher Tolkien描述了这种用法,并在Quettar #1中发表。这与使用拉丁字母来列举列表(a.
、b.
等)类似。
> tengwar "1#︙ Telperion
2#︙ Laurelin"
连字符
当前支持两种连字符形式。使用--ligate-all
选项将同时启用这两种形式。
短载体
短载体()有一个交替的“连字符”形式(),它向右延伸,连接到下一个字符。当使用--ligate-short
(或-s
)时,此程序将根据需要使用连字符形式。
与零宽连接符(在这种情况下,字体支持不太可能成为问题)不同,此变体是一个完全不同的字符,并且某些字体可能根本不提供。
零宽连接符
在某些字体中,可以使用零宽连接符来形成Tengwar的连字符。在命令行上使用--ligate-zwj
(或-z
)开关时,此程序将在输出文本中的某些字符之间插入连接符,基于各种过于复杂的规则。这些规则基于Tengwar Telcontar的连字符行为以及一定程度上的个人品味。
对于不支持这些连字符的字体,连接字符的存在不应影响渲染;然而,它会使输出字符串的字节数增加约15%。
关于标点符号的说明
Tengwar 标点符号基本上无法从有标点的拉丁文本中可靠地推断出来。因此,最好根本不尝试,而是根据输出来标点输入文本。
此程序确实将标点符号转换为Unicode代码点,但空白字符将按原样传递,既不添加也不删除¹。截至本文写作时,版本1.0.0
,标点符号的处理方式如上表所示
输入 | 输出 |
---|---|
' 、. 、, 、· |
|
: , ; |
|
⁝ 、︙ |
|
⊘ ,⊙ ,… |
|
⸬ |
|
- |
|
= |
|
? |
|
! |
|
|| * |
|
( ,[ ,“ |
|
) ,] ,” ,„ |
|
管道字符(|
)也被转换为
,但由于 Markdown 格式的技术限制,它不能包含在此表中。
需要注意的是,波浪号(~
)没有被转换,尽管它与标点符号字符
非常相似。这是因为波浪号代表 LaTeX 中的一种特定类型的空白,而运行于 LaTeX 中是该程序创建的动机用例。波浪号被保留,以便它能够安全地通过并被 LaTeX 读取。
¹ 虽然 这个程序 不影响空白,但它只能处理运行它的环境提供的离散参数。大多数环境都会在空格处分割您的输入,并将周围的单词作为不相连的值提供;此程序不能区分 tengwar asdf qwert
和 tengwar asdf<TAB>qwert
。因此,强烈建议将所有输入文本放在双引号内。
功能
Cargo 功能 允许在编译时对程序的行为进行非常强大的更改。
csur
ConScript Unicode 注册定义了一组用于 Tengwar 的代码点,该程序使用的是这些代码点。然而,Tengwar 正在(非常缓慢地)被添加到官方 Unicode 标准,在 补充多语言平面。那时,该程序将切换到使用那些代码点。
csur
功能目前不执行任何操作,但当 Tengwar 最终被编码时,它将使程序继续使用 CSUR 块。现在提前提供此功能,以便任何希望的人可以在更新系统中指定此功能——或者如果将此程序作为库使用,在他们的 Cargo.toml
中。这实际上允许您选择退出最终的切换。
dots-standard
CSUR Tengwar 块中定义的几个代码点是由点组成的标点符号。由于 Unicode 已经定义了许多点标点符号,因此可能在可能的情况下使用那些符号更可取。用 --features "dots-standard"
编译此程序将导致它使用具有相同排列的标准 Unicode 字符,而不是 Tengwar 块中的那些字符。
在 LaTeX 中的使用
以下是一个使用 XeLaTeX 的最小工作示例。它使用 Graphite 渲染器的 Tengwar Telcontar 字体,给定的命令将生成 main.pdf
作为其输出。
% main.tex
\documentclass[12pt]{article}
\usepackage{fontspec}
\defaultfontfeatures{Renderer=Graphite}
\newfontfamily\TengTelc[WordSpace=2]{Tengwar Telcontar}
\newcommand{\Tengwar}[2][]{\input{|tengwar #1 -- '#2'}\unskip}
\newcommand{\Classical}[2][\TengTelc]{{#1\Tengwar[-Qrsz]{#2}}}
\newcommand{\Beleriand}[2][\TengTelc]{{#1\Tengwar[-Brsz]{#2}}}
\newcommand{\Gondor}[2][\TengTelc]{{#1\Tengwar[-Grsz]{#2}}}
\begin{document}
% "The king of Doriath, Elu Thingol, was slain by Dwarves from Nogrod."
\Classical{i aran Lestanórëo ,}
\Beleriand{“Elu Thingol„}
\Classical{, nánë nahtana ló Casari Návaróto ::}
\end{document}
xelatex -interaction=nonstopmode --shell-escape main.tex
依赖关系
~4–13MB
~187K SLoC