Skip to content

Commit f34b764

Browse files
committed
Work in progress
Change API, add ukrainean map
1 parent 4371cc1 commit f34b764

15 files changed

+409
-106
lines changed

Dockerfile

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
FROM php:7.1
2+
3+
RUN apt-get update && \
4+
apt-get install -y git zip unzip && \
5+
php -r "readfile('http://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer && \
6+
apt-get -y autoremove && \
7+
apt-get clean && \
8+
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

composer.json

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,14 @@
2222
},
2323
"require": {
2424
"php": ">=7.1",
25+
"ext-iconv": "*",
2526
"illuminate/support": "~5"
2627
},
2728
"require-dev": {
2829
"phpunit/phpunit": "^7.4",
2930
"orchestra/testbench": "^3.7",
30-
"friendsofphp/php-cs-fixer": "^2.13"
31+
"friendsofphp/php-cs-fixer": "^2.13",
32+
"brainmaestro/composer-git-hooks": "^2.6"
3133
},
3234
"extra": {
3335
"laravel": {
@@ -37,6 +39,11 @@
3739
"aliases": {
3840
"Transliteration": "ElForastero\\Transliterate\\Facade"
3941
}
42+
},
43+
"hooks": {
44+
"pre-commit": [
45+
"php-cs-fixer fix . --rules=@Symfony"
46+
]
4047
}
4148
},
4249
"scripts": {

composer.lock

Lines changed: 70 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docker-compose.yml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
version: "3"
2+
3+
services:
4+
php:
5+
build: .
6+
volumes:
7+
- ./:/srv/app
8+
working_dir: /srv/app
9+
command: bash -c "composer install && composer test"
10+

src/Map.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?php
2+
/**
3+
* Created by PhpStorm.
4+
* User: elforastero
5+
* Date: 12/3/18
6+
* Time: 10:08 PM
7+
*/
8+
9+
namespace ElForastero\Transliterate;
10+
11+
12+
class Map
13+
{
14+
15+
}

src/ServiceProvider.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public function register()
3535
$this->mergeConfigFrom($configPath, 'transliterate');
3636

3737
$this->app->bind('Transliteration', function ($app) {
38-
return new Transliteration();
38+
return new Transliterator();
3939
});
4040
}
4141
}

src/Transliteration.php

Lines changed: 0 additions & 78 deletions
This file was deleted.

src/Transliterator.php

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace ElForastero\Transliterate;
6+
7+
/**
8+
* Feel free to change it.
9+
* Either by pull request or forking.
10+
*
11+
* Class Transliteration
12+
*
13+
* @author Eugene Dzhumak <[email protected]>
14+
*
15+
* @version 2.0.0
16+
*/
17+
class Transliterator
18+
{
19+
/**
20+
* @var string
21+
*/
22+
private $lang;
23+
/**
24+
* @var
25+
*/
26+
private $map;
27+
28+
/**
29+
* @param string $lang
30+
* @return Transliterator
31+
*/
32+
public function from(string $lang): self
33+
{
34+
$this->lang = $lang;
35+
36+
return $this;
37+
}
38+
39+
/**
40+
* @param string $map
41+
* @return Transliterator
42+
*/
43+
public function useMap(string $map): self
44+
{
45+
$this->map = $map;
46+
47+
return $this;
48+
}
49+
50+
/**
51+
* Transliterate the given string.
52+
*
53+
* @param string $text
54+
*
55+
* @return string
56+
*/
57+
public function make(string $text): string
58+
{
59+
$map = $this->getMap();
60+
$transliterated = str_replace(array_keys($map), array_values($map), $text);
61+
62+
if (config('transliterate.remove_accents', false) === true) {
63+
$transliterated = iconv('UTF-8', 'ASCII//IGNORE//TRANSLIT', $transliterated);
64+
}
65+
66+
return self::applyTransformers($transliterated);
67+
}
68+
69+
/**
70+
* Get map array according to config file.
71+
*
72+
* @return array
73+
*/
74+
private function getMap(): array
75+
{
76+
$map = $this->map ?? config('transliterate.default_map');
77+
$lang = $this->lang ?? config('transliterate.default_lang');
78+
$customMaps = config('transliterate.custom_maps');
79+
80+
$vendorMapsPath = __DIR__ . DIRECTORY_SEPARATOR . 'maps' . DIRECTORY_SEPARATOR;
81+
$path = $customMaps[$lang][$map] ?? $vendorMapsPath . $lang . DIRECTORY_SEPARATOR . $map . '.php';
82+
83+
if (!file_exists($path)) {
84+
throw new \InvalidArgumentException("The transliteration map '${path}' doesn't exist");
85+
}
86+
87+
/** @noinspection PhpIncludeInspection */
88+
return require $path;
89+
}
90+
91+
/**
92+
* Apply a series of transformations defined as closures in the configuration file.
93+
*
94+
* @param string $string
95+
*
96+
* @return string
97+
*/
98+
private function applyTransformers(string $string): string
99+
{
100+
foreach (Transformer::getAll() as $transformer) {
101+
$string = $transformer($string);
102+
}
103+
104+
return $string;
105+
}
106+
}

0 commit comments

Comments
 (0)