r0073rr0r / skritphp
PHP port of Skrit Serbian slang transforms (satrovacki, utrovacki, leetrovacki) with Laravel support.
1.1.1
2026-04-15 07:33 UTC
Requires
- php: ^8.2
- ext-mbstring: *
- illuminate/support: ^10.0|^11.0|^12.0
Requires (Dev)
- orchestra/testbench: ^8.0|^9.0|^10.0
- phpunit/phpunit: ^10.5
README
PHP port of Python skrit (v0.6.0) for Serbian slang-style text transforms:
satrovackiutrovackileetrovacki- unified
autorouter with encode/decode detection
Repo/package identity:
- GitHub:
r0073rr0r/SkritPHP - Composer:
r0073rr0r/skritphp
Requirements
- PHP
^8.2 - ext-mbstring
Install
composer require r0073rr0r/skritphp
Pure PHP Usage
Unified Router (Skrit::encodeText)
<?php use Skrit\Skrit; [$encoded, $mode] = Skrit::encodeText('Zemun zakon matori', mode: 'auto'); // $mode = 'satro' // $encoded = 'Munze konza torima'
Force specific mode
<?php use Skrit\Skrit; [$satro] = Skrit::encodeText('bazen', mode: 'satro'); // zenba [$utro] = Skrit::encodeText('bazen', mode: 'utro'); // uzenzabanje [$leet] = Skrit::encodeText('bazen', mode: 'leet', leetBase: 'satro'); // 23n84
Direct transformer classes
<?php use Skrit\Satrovacki; use Skrit\Utrovacki; use Skrit\Leetrovacki; $satro = new Satrovacki(); echo $satro->encode('Beograd'); // Gradbeo $utro = new Utrovacki(prefix: 'x', infix: 'yy', suffix: 'zz'); echo $utro->encode('bazen'); // xzenyybazz $leet = new Leetrovacki(baseMode: 'utro', leetDensity: 1.0); echo $leet->encode('bazen'); // 00zen24ban73
Supported Router Options
mode:auto|satro|utro|leetdetectFromminWordLengthplainCTarget:ц|ч|ћsoftTjToCyrillicleetBase:auto|satro|utroleetProfile:basic|readable|fullleetComplexityleetDensityzaStyle:24|z4njeStyle:n73|nj3|њutroPrefix,utroInfix,utroSuffix
Laravel Usage
Auto-discovery is enabled in composer.json.
Publish config
php artisan vendor:publish --tag=skrit-config
Facade
<?php use Skrit\Laravel\Facades\Skrit; [$encoded, $mode] = Skrit::encodeText('Zemun zakon matori', ['mode' => 'auto']);
Dependency Injection
<?php use Skrit\Contracts\SkritServiceInterface; final class CipherController { public function __construct(private SkritServiceInterface $skrit) {} public function __invoke(): array { return $this->skrit->encodeText('uzenzabanje', ['mode' => 'auto']); } }
Livewire Example
Livewire sample component is included at:
examples/livewire/app/Livewire/SkritCipher.phpexamples/livewire/resources/views/livewire/skrit-cipher.blade.php
To use it in your Laravel app:
- Copy component class to
app/Livewire/SkritCipher.php. - Copy blade view to
resources/views/livewire/skrit-cipher.blade.php. - Render it in a blade page:
<livewire:skrit-cipher />.
Testing
Run full test suite:
composer test
Run strict gate (tests + enforced 100% coverage):
composer test:strict
Included tests cover:
- parity of core behavior against Python reference cases
- invariant checks on a 963-word Serbian corpus across satro/utro/leet
- satro/utro/leet transformer rules
- unified auto router behavior
- Laravel service container + facade integration
Linguistic Docs
Bundled docs (hostable from this repo):
License
GPL-3.0-or-later