Skip to main content

Serbian street-slang text transformations: satrovacki, utrovacki and leetrovacki.

Project description

Skrit

PyPI Python License: GPL-3.0-or-later

Coverage PyPI Downloads

Skrit is a Python toolkit for Serbian slang-style text transforms:

  • satrovacki (base split/swap transform)
  • utrovacki (derived from satro: u + second + za + first + nje)
  • leetrovacki (leet layer over satro/utro logic)

The main entry point is skrit.py (router + CLI).

Auto mode is bidirectional: it can encode plain text and decode already encoded satro/utro/leet text back to plain form.

Project Story

Skrit is a recreation of an older idea.

The original concept existed much earlier, around 2000, as a personal experiment written in the mIRC scripting language (mIRC script/basic style). It was my first and only attempt to turn street talk and slang patterns into a kind of playful "encryption" system.

That early script was likely published on a paste site that no longer exists, so the original implementation was lost.

This repository brings that same core idea back, now rebuilt in Python after a long time.

Future direction may include:

  • a TypeScript module version
  • and later, a possible integration into the AndroidIRCx app

Requirements

  • Python 3.10+

Install from PyPI

python -m pip install --upgrade skrit

Quick Start (installed CLI)

skrit --mode auto "Zemun zakon matori"

Output:

Munze konza matori

You also get direct command entry points:

satrovacki "Zemun zakon matori"
utrovacki "Zemun zakon matori"
leetrovacki --mode satro "Zemun zakon matori"

Quick Start (local repo script)

py skrit.py --mode auto "Zemun zakon matori"

Output:

Munze konza matori

Python API Example

from skrit import encode_text

encoded, mode = encode_text("Zemun zakon matori", mode="auto")
print(mode)
print(encoded)

Output:

satro
Munze konza matori

Modes

  • --mode auto - detect style and direction automatically (satro, utro, or leet; encode or decode)
  • --mode satro - force satrovacki
  • --mode utro - force utrovacki
  • --mode leet - force leetrovacki

Examples (with output)

Auto

py skrit.py --mode auto "Zemun zakon matori"
Munze konza matori

Auto decode examples:

py skrit.py --mode auto "munze konza"
zemun zakon
py skrit.py --mode auto "uzenzabanje"
bazen
py skrit.py --mode auto "m00n23 k0n24"
zemun zakon

Satro

py skrit.py --mode satro "Zemun zakon matori"
Munze konza matori

Utro

py skrit.py --mode utro "Zemun zakon matori"
Umunzazenje ukonzazanje utorizamanje
py skrit.py --mode utro "Zemun Pistolj Bazen"
Umunzazenje Ustoljzapinje Uzenzabanje

Leet (default leet base = auto)

py skrit.py --mode leet "Zemun zakon matori"
M00n23 k0n24 70r1m4

Leet over Utro base

py skrit.py --mode leet --leet-base utro "Zemun zakon matori"
00mun24zen73 00kon24zan73 00tori24man73

Keep the same encryption style as reference text

py skrit.py --mode auto --detect-from "M00n23 k0n24 70r1m4" "Zemun zakon matori"
M00n23 k0n24 70r1m4

Show detected mode

py skrit.py --mode auto --show-mode "Zemun zakon matori"
[mode=satro]
Munze konza matori

Full leet profile

py skrit.py --mode leet --leet-profile full "Zemun zakon matori"
/\/\(_)^/23 >|0^/24 70ri21/\/\4

full uses the full per-letter variant table from leet.py (LEET_TABLE). You can choose deeper variants with --leet-complexity.

py skrit.py --mode leet --leet-profile full --leet-complexity 2 "Zemun zakon matori"
[v]v/\/-/_[- 1<oh/\/-/_@ -|-oh|`][[v]@

Readable full leet with density control

py skrit.py --mode leet --leet-profile readable --leet-density 0.5 "Zemun zakon matori"
Munze k0nz4 70ri21^^4

Cyrillic option examples

py skrit.py --mode utro --plain-c-target "ч" "ацб"
учбзаање
py skrit.py --mode utro --soft-tj "атјб"
ућбзаање

Longer Cyrillic sentence examples

py skrit.py --mode auto "Земун закон матори пиштољ базен значка ђаво"
Мунзе конза матори штољпи зенба чказна вођа
py skrit.py --mode utro "Земун закон матори пиштољ базен значка ђаво"
Умунзазење уконзазање уторизамање уштољзапиње узензабање учказазнање увозађање
py skrit.py --mode leet --leet-base utro "Земун закон матори пиштољ базен значка ђаво"
00мун24зен73 00кон24зан73 00тори24ман73 00штољ24пин73 00зен24бан73 00чка24знан73 00во24ђан73

CLI Help

py skrit.py --help

The CLI supports:

  • --mode {auto,satro,utro,leet}
  • --show-mode
  • --detect-from
  • --min-word-length
  • --plain-c-target {ц,ч,ћ}
  • --soft-tj
  • --leet-base {auto,satro,utro}
  • --leet-profile {basic,readable,full}
  • --leet-complexity
  • --leet-density (default: 0.86)
  • --za-style {24,z4}
  • --nje-style {n73,nj3,њ}
  • --utro-prefix
  • --utro-infix
  • --utro-suffix

Command Examples For All Flags

--show-mode

py skrit.py --mode auto --show-mode "M00n23 k0n24"
[mode=leet]
M00n23 k0n24

--detect-from

py skrit.py --mode auto --detect-from "M00n23 k0n24 70r1m4" "Zemun zakon matori"
M00n23 k0n24 70r1m4

--min-word-length

py skrit.py --mode satro --min-word-length 5 "riba rep"
riba rep

--plain-c-target

py skrit.py --mode utro --plain-c-target "ч" "ацб"
учбзаање

--soft-tj

py skrit.py --mode utro --soft-tj "атјб"
ућбзаање

--leet-base

py skrit.py --mode leet --leet-base utro "Zemun zakon matori"
00mun24zen73 00kon24zan73 00tori24man73

--leet-profile

py skrit.py --mode leet --leet-profile full "Zemun zakon matori"
/\/\(_)^/23 >|0^/24 70ri21/\/\4

--leet-complexity

py skrit.py --mode leet --leet-profile full --leet-complexity 2 "Zemun zakon matori"
[v]v/\/-/_[- 1<oh/\/-/_@ -|-oh|`][[v]@

--leet-density

py skrit.py --mode leet --leet-profile readable --leet-density 0.5 "Zemun zakon matori"
Munze k0nz4 70ri21^^4

--za-style

py skrit.py --mode leet --leet-base utro --za-style z4 "Zemun zakon matori"
00munz4zen73 00konz4zan73 00toriz4man73

--nje-style

py skrit.py --mode leet --leet-base utro --nje-style nj3 "Zemun zakon matori"
00mun24zenj3 00kon24zanj3 00tori24manj3

--utro-prefix --utro-infix --utro-suffix

py skrit.py --mode utro --utro-prefix x --utro-infix yy --utro-suffix zz "bazen"
xzenyybazz

Project Modules

  • skrit.py - unified router/CLI
  • satrovacki.py - satro transformer
  • utrovacki.py - utro transformer
  • leet.py - leet table + profiles + helper API
  • leetrovacki.py - leet transformer on top of satro/utro

License

This project is licensed under the GNU General Public License v3.0. See LICENSE for the full text.

Tests

python -m unittest discover -s tests -p "test_*.py" -v

PyPI Packaging

Package metadata is defined in pyproject.toml (distribution name: skrit).

Build locally:

python -m pip install --upgrade build twine
python -m build
python -m twine check dist/*

Install locally from built wheel:

python -m pip install dist/skrit-0.4.0-py3-none-any.whl

Publish:

  • Manual: python -m twine upload dist/* (with TWINE_USERNAME=__token__ and TWINE_PASSWORD=<pypi-token>)
  • GitHub Actions: release publish workflow in .github/workflows/publish.yml (Trusted Publishing)

Local Commit Gate (Coverage 100%)

Enable repo hooks:

git config core.hooksPath .githooks

With this enabled, pre-commit runs tests under coverage and blocks commit unless coverage stays at 100% (from .coveragerc).

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

skrit-0.4.0.tar.gz (35.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

skrit-0.4.0-py3-none-any.whl (29.1 kB view details)

Uploaded Python 3

File details

Details for the file skrit-0.4.0.tar.gz.

File metadata

  • Download URL: skrit-0.4.0.tar.gz
  • Upload date:
  • Size: 35.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.11

File hashes

Hashes for skrit-0.4.0.tar.gz
Algorithm Hash digest
SHA256 ee8bbba40dfb6483a2145bf1efb28bfb48b36f06a4bad7c2166213b8a2becd48
MD5 845233f27246cadb69717e65b8d73425
BLAKE2b-256 8b77425b239e17c0f61043e4ce128c5697242a1d0c93cf338a218f67e0716a1f

See more details on using hashes here.

File details

Details for the file skrit-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: skrit-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 29.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.11

File hashes

Hashes for skrit-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 34b6c8eae14a99ce6791b7c04b68e7bef2b9e6ccc2d2d50a8fc70967fb5df3ef
MD5 241383c6d4d0909aae4b279a7435bd31
BLAKE2b-256 c2aab16bf61ffbb97a44b94c9f09d16117766438dd0543b322efb99f3b14e44b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page