Metadata-Version: 2.1
Name: jianzipu
Version: 0.4.1
Summary: 根据古琴减字谱读法渲染减字图像
Author: alephpi
Author-email: maosicheng98@gmail.com
Requires-Python: >=3.11,<4.0
Classifier: Development Status :: 3 - Alpha
Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)
Classifier: Natural Language :: Chinese (Simplified)
Classifier: Natural Language :: Chinese (Traditional)
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Topic :: Software Development :: Libraries
Classifier: Topic :: Text Processing :: Fonts
Requires-Dist: pyparsing (>=3.1.1,<4.0.0)
Description-Content-Type: text/markdown

# jianzipu 包

减字谱包的功能：

1. 定义通用的减字谱类
2. 以减字谱读法作为减字谱的输入码
3. 通过将减字谱读法转换为减字谱 python 类

## 减字谱的语法问题

以往的种种减字谱电子化尝试，往往注重其字面形态，从形态的角度考虑编码与实现。然而由于减字谱历来没有严格规范，始终处于约定俗成、自由发挥的状态，故产生一义多字、一字多写的情况。为了认真考察减字谱的编码问题，不得不关注减字谱的语法，不得不从语言学的角度、而非单纯的字面符号的角度切入。

在符号层面，减字谱作为一种符号，一般的具有所指和能指两个方面。减字谱的能指只是字面的（而非语音的），所指为一个减字之前的符号，即一串由自然语言表示的指法。

为了方便叙述，我们有必要先统一术语：

1. 减字符号：由一个汉字简化而来的符号。譬如勾剔抹挑的减字。
2. 减字谱字：由若干个减字符号作为字根组合而成的一个完整的方块字。譬如散勾三的减字。
3. 减字谱：由一系列的减字谱字排列而成的完整琴谱。譬如酒狂减字谱。
4. 读法：减字符号的读法就是它的所指，是汉语中的一个词，减字谱字的读法是减字符号的读法按规则组合而成的汉语短语。

在不发生歧义的情况下，我们分别简称其为减字、谱字。为方便起见（因为暂时不存在简便的减字输入和显示办法），我们总是以一个符号的所指而非其能指来指代该符号。

从语言学的角度看，总的来说，符号相当于语素范畴，谱字相当于词以上范畴，减字谱对应于篇章范畴。当然我们这里的范畴不是汉语而是作为汉语的一个子集即减字谱语言的范畴。

<!-- [

我们同样地可以研究哪些符号是自由/成词语素，哪些是不成词语素（黏着语素，剩余语素），哪些甚至不构成语素而只是语素的组成部分，例如：

1. 左手指法（大食中名跪）、右手八法（勾剔抹挑托擘打摘）、弦序、徽位都是自由语素。
2. 泛是一个剩余语素，因为它
3. 记号如泛起、泛止，它们是自由语素，因为其可以作为一个完整谱字独立运用
4. 我们约定勾剔、抹挑为一个语素
5. 修饰词如注、绰是黏着语素，吟、猱则是自由语素

] -->

在分析时，我们借助减字谱的读法在汉语中的语法、语义结构定义减字谱的语法、语义结构。

下面是一些有效的古琴指法举例：

1. 散音勾三弦
2. 食指七徽勾四弦
3. 大指按九徽绰勾四弦
4. 吟|猱|进|退|进复|退复|撞|往来|分开|泛起|泛止
5. 上|下七徽九分
6. 二上七六 (分两步上到七徽六分)
7. [勾剔|抹挑|轮|慢轮|半轮]四
8. 历五四
9. 散撮五七
10. 撮大七徽七弦散五弦

通过分析这些例子，我们能发现至少两种基本结构：

1. 以指法和弦序或徽位组合构成指法短语，譬如大指按七徽、勾三弦，在汉语中为述宾关系
2. 注、猱等修饰词可以修饰指法短语，譬如大指七徽注、大指七徽猱等等，在汉语中为定中关系，这里定语在后。而这种结构在上下文中常常省略指法短语，如“大指七徽勾三弦，猱”就是“大指七徽勾三弦，大指七徽猱”的省略。

同时我们还注意到实际运用时丰富的省略现象：如弦、徽、分、指、按、音的省略，以及一些特殊结构，如撮式结构。

通过分析这些结构，我们相继得到基本词类和生成式。

### 基本词类

1. 指法词：明确用指的词
2. 数字词：弦序或徽位词
3. 修饰词：修饰指法的词，总是依附指法词而不独立出现，如注、绰、慢，用来修饰指法，修饰词可以叠加，如注猱。部分修饰词在谱中以小字出现。
4. 记号词：标记节奏、速度及其他

### 生成式

用 BN-Form 表示

```
<谱字>:== <简式>|<复式>|<记号>|<双手指法>
<简式>:== <徽位指法短语><特殊><弦序指法短语>
<徽位指法短语>:== <徽位指法><徽位>
<弦序指法短语>:== <弦序指法><弦序>
<徽位指法>:== 大|食|中|名|跪|...
<弦序指法>:== 勾|剔|抹|挑|托|擘|...
<特殊>:== 注|绰|...
<修饰>:== 紧|慢|...
<走位指法>:== 上|下|...
<徽位>:==一徽|二徽|...|十三徽|徽外|...
<弦序>:==一弦|二弦|...|七弦
<记号>:==泛起|泛止|...
<复式>:== <复式指法><复子式><复子式>
<复式指法>:==撮|双弹|...
<复子式>:==<徽位指法短语><特殊><弦序>
```

> 撮式的标准参考了周昌乐的《古琴艺术的机器演绎》一书第五十页“减字谱汉字文本格式的描述形式”。

由此可见我们将古琴指法语言整理为一种上下文无关语言。不难发现，通过整理古琴指法语言的规则，我们规范了减字谱的编码，因为一旦把握住指法语言的规则，我们就将减字谱的编码从杂乱繁复的字面形式解放出来，建立在更容易把握的基础上，进而方便我们后续确定合理的减字谱显示规则。

## 实现

### Symbol

定义各种减字符号类
每个符号有若干属性：

1. 名称
2. 类型
3. 减字体式
4. 读法

符号下有若干子类：

1. 指法类
2. 数字类
3. 修饰类
4. 记号类

其中指法类符号还有一项特殊属性：价位。它表示能够与该符号匹配的数字个数。如勾的价位为 1，历的价位为 2 或 3.

