ευκράς / κοίνος
与圣经引用和Unicode希腊文文本一起工作
Requires
- php: >=5.4.0
This package is not auto-updated.
Last update: 2024-09-21 12:27:11 UTC
README
koίνος
一个PHP库和composer包,用于处理
- 文本和数据库中的圣经引用,以及
- Unicode中的古典和科普林斯希腊文文本。
在古希腊语中,“koíнос”意为“共同”。此包包含来自Hexapla项目的许多可重用服务和实用工具。
安装
您需要PHP >=5.4和phpunit >=4.0。
在composer.json
"require": { "eukras/koinos": "~1.1" }
测试
测试是开发者的最佳文档。
composer dump-autoload # updates /vendor for autoloading; see .gitignore
phpunit -c tests
库数据文件
./src/Resources/library/lxx/books.csv ./src/Resources/library/nt/books.csv
在每个文件中,CSV行指定id、库名、名称、简称、处理程序、引用深度、别名、总章节。
- 处理程序是用于URI的简称,例如
Romans 1
的处理程序是rom+1
。 - 像《哥林多前书》这样的普通书籍的引用深度为2(章节:经节),但像《腓利门书》这样的单章节书籍仅按经节识别,因此引用深度为1。
...
107,NT,1 Corinthians,1 Cor,1cor,2,1co,16
...
118,NT,Philemon,Phm,phm,1,phl/philem,1
...
Service\ReferenceManager和Utility\Reference
ReferenceManager用于构建、操作和格式化引用。
./src/Utility/Reference.php ./src/Service/ReferenceManager.php ./tests/Utility/Reference.php ./tests/Service/ReferenceManager.php
示例
如下初始化ReferenceManager
use Koinos\Service\ReferenceManager; $rm = new ReferenceManager($libraries=['nt', 'lxx']);
创建库很简单:只需添加Resources/library/$library/books.csv
(见上文),并将$library
作为构造函数参数传递。
ReferenceManager处理大多数引用操作。
$mattId = $rm->matchBookName('matt'); // returns (int)101, say. $matt28 = $rm->createReferenceFromBookAndChapter($mattId, 28);
$matt28
现在是一个Reference
对象。
$mark1 = $rm->getNextChapterReference($matt28); echo $rm->getShortTitle($matt28); // Matt 28 echo $rm->getHandle($matt28); // matt+28
您通常想处理复杂的人类可读引用字符串
$ref1 = $rm->createReferenceFromQuery('1 Cor 16:1-5,8,10-12,13-14'); $ref2 = $rm->createReferenceFromQuery('1cor+16.1-4,5,8,10-14');
在这个例子中,$ref1
生成的与$ref2
相同。相邻的经节范围将组合成一个标准引用。Koinos不知道或关心给定章节中的经节数量;在内部,完整章节链接被视为第1卷第1节至第999节。
echo $rm->getTitle($ref1); // 1 Corinthians 16:1-5,8,10-14 echo $rm->getTitle($ref2); // 1 Corinthians 16:1-5,8,10-14 $ref1->equals($ref2); // true $ref1->contains($ref2); // true
所有这些加在一起,可以轻松生成HTML链接,尽管在框架中您最有可能将$rm->getHandle($ref)
插入到路由中。
echo $rm->getLink($matt28, $uriPrefix='/r/');
能够生成链接,允许它们在文本中自动替换
$linkedHtml = $rm->linkReferencesInHtml($textContainingReferences, '/r/');
匹配文本中链接的扫描器将识别它们是否存在于平行文本中,即引用由管道字符分隔,例如,“诗篇 14 | 诗篇 53 是相同的。”请参阅测试套件中的示例。
Utility\Reference 内部
使用四元组[book, section, chapter, verse]
进行内部操作;在$ref1
中,1cor是第107本书,具有两级引用(c:v),因此节号始终为1。每个四元组都成为SQL中的UNSIGNED INT(12)
(见下文)。
这使得高效索引和匹配引用和范围变得容易
echo $ref1->getSqlClause($columnName='reference'); // (reference BETWEEN 107001016001 AND 107001016005) OR // (reference BETWEEN 107001016008 AND 107001016008) OR // (reference BETWEEN 107001016010 AND 107001016014) echo $ref1->getSqlRangeClause($startColumn='rangeBegins', $endColumn='rangeEnds'); // (rangeEnds >= 107001016001 AND rangeBegins <= 107001016005) OR // (rangeEnds >= 107001016008 AND rangeBegins <= 107001016008) OR // (rangeEnds >= 107001016010 AND rangeBegins <= 107001016014)
唯一需要注意的是,在PHP中,这些数字必须作为字符串处理,或者转换为(double)
:12位数字超过了PHP的整数长度。引用通常作为四元组操作,这是常规整数1-999。
Utility\Greek
希腊文实用工具执行简单的希腊文文本操作和扫描
./src/Utility/Greek.php ./tests/Utility/Greek.php
不带参数初始化
use Koinos\Utility\Greek; // see composer.json $g = new Greek;
这执行罗马化,并提供了某些Unicode便利包装器。
echo $g->romanize('Ῥύγχος'); // Rhunchos echo $g->romanize('Ἡσυχάζω'); // Hēsuchazō echo $g->romanize('Αὑτοῖσι'); // Hautoisi echo $g->length('ᾁ'); // 1 echo $g->lowercase('Α'); // α echo $g->unicodeChr('1f0c'); // Ἄ
以下是使用它扫描诗篇116(LXX)结构的方式--在Hexapla中,这用于将文本逐字保存到数据库中。
$ps116 = "1 αλληλουια. αἰνεῖτε τὸν κύριον πάντα τὰ ἔθνη. ἐπαινέσατε αὐτόν πάντες οἱ λαοί. 2 ὅτι ἐκραταιώθη τὸ ἔλεος αὐτοῦ [ἐφ’ ἡμᾶς] καὶ ἡ ἀλήθεια τοῦ κυρίου μένει εἰς τὸν αἰῶνα. Τί εἰς τέλος;";
对于每个单词,让我们获取它的书/章节/经节编号(BCV),然后获取段落/句子/单词编号(PSW),然后获取任何前导或尾随标点符号。(诗篇是第227卷。)
$structure = $g->getStructure($ps116, 227, 116); // b c v p s w prefix word suffix [ [ 227, 116, 1, 1, 1, 1, '', 'αλληλουια', '.' ], [ 227, 116, 1, 2, 1, 1, '', 'αἰνεῖτε', '' ], [ 227, 116, 1, 2, 1, 2, '', 'τὸν', '' ], [ 227, 116, 1, 2, 1, 3, '', 'κύριον', '' ], [ 227, 116, 1, 2, 1, 4, '', 'πάντα', '' ], [ 227, 116, 1, 2, 1, 5, '', 'τὰ', '' ], [ 227, 116, 1, 2, 1, 6, '', 'ἔθνη', '.' ], [ 227, 116, 1, 2, 2, 1, '', 'ἐπαινέσατε', '' ], [ 227, 116, 1, 2, 2, 2, '', 'αὐτόν', '' ], [ 227, 116, 1, 2, 2, 3, '', 'πάντες', '' ], [ 227, 116, 1, 2, 2, 4, '', 'οἱ', '' ], [ 227, 116, 1, 2, 2, 5, '', 'λαοί', '.' ], [ 227, 116, 2, 3, 1, 1, '', 'ὅτι', '' ], [ 227, 116, 2, 3, 1, 2, '', 'ἐκραταιώθη', '' ], [ 227, 116, 2, 3, 1, 3, '', 'τὸ', '' ], [ 227, 116, 2, 3, 1, 4, '', 'ἔλεος', '' ], [ 227, 116, 2, 3, 1, 5, '', 'αὐτοῦ', '' ], [ 227, 116, 2, 3, 1, 6, '[','ἐφ’', '' ], [ 227, 116, 2, 3, 1, 7, '', 'ἡμᾶς', ']' ], [ 227, 116, 2, 3, 1, 8, '', 'καὶ', '' ], [ 227, 116, 2, 3, 1, 9, '', 'ἡ', '' ], [ 227, 116, 2, 3, 1, 10, '', 'ἀλήθεια', '' ], [ 227, 116, 2, 3, 1, 11, '', 'τοῦ', '' ], [ 227, 116, 2, 3, 1, 12, '', 'κυρίου', '' ], [ 227, 116, 2, 3, 1, 13, '', 'μένει', '' ], [ 227, 116, 2, 3, 1, 14, '', 'εἰς', '' ], [ 227, 116, 2, 3, 1, 15, '', 'τὸν', '' ], [ 227, 116, 2, 3, 1, 16, '', 'αἰῶνα', '.' ], [ 227, 116, 2, 4, 1, 1, '', 'Τί', '' ], [ 227, 116, 2, 4, 1, 2, '', 'εἰς', '' ], [ 227, 116, 2, 4, 1, 3, '', 'τέλος', ';' ] ];
请参阅类和测试套件以获取更多信息。