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 次

Apache-2.0

245KB
4.5K SLoC

滕瓦语

crates.io docs.rs

将拉丁文文本自动转换为 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 qwerttengwar 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

Sample text

依赖关系

~4–13MB
~187K SLoC