skrits
v1.1.0
Published
TypeScript port of the Skrit Serbian slang text transformer (satrovacki, utrovacki, leetrovacki)
Downloads
219
Maintainers
Readme
SkriTS
TypeScript port of Python skrit (v0.5.x) for Serbian slang-style text transforms:
satrovackiutrovackileetrovacki- unified
autorouter with encode/decode detection
Also available as:
- Python:
r0073rr0r/Skrit - PHP:
r0073rr0r/SkritPHP
Requirements
- Node.js
>=18 - TypeScript
^5.0(for direct use)
Install
npm install skritsUsage
Unified Router (encodeText)
import { encodeText } from 'skrits';
const result = encodeText('Zemun zakon matori', { mode: 'satro' });
// 'Munze konza torima'
const decoded = encodeText('Munze konza', { mode: 'auto' });
// 'Zemun zakon'Force specific mode
import { encodeText } from 'skrits';
encodeText('bazen', { mode: 'satro' }); // 'zenba'
encodeText('bazen', { mode: 'utro' }); // 'uzenzabanje'
encodeText('bazen', { mode: 'leet', leetBase: 'satro', leetDensity: 1.0 }); // '23nb4'Direct transformer classes
import { Satrovacki, Utrovacki, Leetrovacki } from 'skrits';
const satro = new Satrovacki();
satro.encode('Beograd'); // 'Gradbeo'
satro.decode('Gradbeo'); // 'Beograd'
const utro = new Utrovacki({ prefix: 'x', infix: 'yy', suffix: 'zz' });
utro.encode('bazen'); // 'xzenyybazz'
const leet = new Leetrovacki({ base: 'utro', leetDensity: 1.0 });
leet.encode('bazen'); // 'uzen24ban73'Cyrillic support
import { Satrovacki } from 'skrits';
const s = new Satrovacki();
s.encode('Земун закон матори'); // 'Мунзе конза матори'
s.encode('Beograd'); // 'Gradbeo'Leet engine
import { LeetEncoder, applyLeet, getLeetProfile } from 'skrits';
const enc = new LeetEncoder({ profile: 'basic', density: 1.0 });
enc.encode('bazen'); // '54z3n'
const mapping = getLeetProfile('full', undefined, 0);
applyLeet('hello', mapping, 0.9);Supported Options
All options for encodeText and transformer constructors:
| Option | Values | Default | Description |
|---|---|---|---|
| mode | auto\|satro\|utro\|leet | auto | Transformation mode |
| detectFrom | satro\|utro\|leet\|null | null | Force decode detection source |
| minWordLength | number | 3 | Skip words shorter than this |
| plainCTarget | ц\|ч\|ћ | ц | Cyrillic target for plain c |
| softTjToCyrillic | boolean | false | Map tj → ћ |
| exceptions | Record<string, string> | {} | Word-level overrides |
| leetBase | auto\|satro\|utro | auto | Base mode for leet |
| leetProfile | basic\|readable\|full | basic | Leet substitution profile |
| leetComplexity | number | 0 | Variant depth for full profile |
| leetDensity | 0.0–1.0 | 0.86 | Fraction of chars to substitute |
| zaStyle | 24\|z4 | 24 | Utro infix leet style |
| njeStyle | n73\|nj3\|њ | n73 | Utro suffix leet style |
| utroPrefix | string | u | Utro prefix |
| utroInfix | string | za | Utro infix |
| utroSuffix | string | nje | Utro suffix |
Testing
npm testnpm run test:coverageTests cover:
- satrovacki encode/decode roundtrip (Latin + Cyrillic)
- utrovacki affix encoding and decode
- leet profiles, density, and detection
- leetrovacki base mode resolution and styling
- unified router auto-detection and decode routing
- transliteration edge cases
License
GPL-3.0-or-later
