r0073rr0r/skritphp

PHP port of Skrit Serbian slang transforms (satrovacki, utrovacki, leetrovacki) with Laravel support.

Maintainers

Package info

github.com/r0073rr0r/SkritPHP

pkg:composer/r0073rr0r/skritphp

Statistics

Installs: 3

Dependents: 0

Suggesters: 0

Stars: 1

Open Issues: 0

1.1.1 2026-04-15 07:33 UTC

This package is auto-updated.

Last update: 2026-04-15 07:34:24 UTC


README

CI Packagist Version PHP License: GPL-3.0-or-later Coverage Packagist Downloads GitHub Stars GitHub Forks GitHub Issues Last Commit

PHP port of Python skrit (v0.6.0) for Serbian slang-style text transforms:

  • satrovacki
  • utrovacki
  • leetrovacki
  • unified auto router 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|leet
  • detectFrom
  • minWordLength
  • plainCTarget: ц|ч|ћ
  • softTjToCyrillic
  • leetBase: auto|satro|utro
  • leetProfile: basic|readable|full
  • leetComplexity
  • leetDensity
  • zaStyle: 24|z4
  • njeStyle: 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.php
  • examples/livewire/resources/views/livewire/skrit-cipher.blade.php

To use it in your Laravel app:

  1. Copy component class to app/Livewire/SkritCipher.php.
  2. Copy blade view to resources/views/livewire/skrit-cipher.blade.php.
  3. 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

Community