ευκράς/κοίνος

与圣经引用和Unicode希腊文文本一起工作

v1.1.2 2014-01-16 00:00 UTC

This package is not auto-updated.

Last update: 2024-09-21 12:27:11 UTC


README

Koinos logo

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, '', 'τέλος',      ';' ]   ];

请参阅类和测试套件以获取更多信息。