Page MenuHomeWickedGov Phorge

sr.foma
No OneTemporary

Size
5 KB
Referenced Files
None
Subscribers
None
# FOMA script for sr-ec and sr-el conversions
# Generates .att files when run from this directory using:
# foma -f sr.foma
# Then generate executable .pfst files with:
# ../tools/build-langconv-fst.js -l sr-el sr-ec
# ../tools/build-langconv-fst.js -l sr-ec sr-el
echo EXPECT 12
# In PHP BREAKS is [^\w\x80-\xff]
define BREAK \[%_|
A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|
a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|
%0|1|2|3|4|5|6|7|8|9|
Ć|ć|Č|č|Đ|đ|Š|š|Ž|ž|Ђ|Ј|Љ|Њ|Ћ|Ќ|Ѝ|Ў|Џ|А|Б|В|Г|Д|Е|Ж|З|И|Й|К|Л|М|Н|О|П|Р|С|Т|У|Ф|Х|Ц|Ч|Ш|а|б|в|г|д|е|ж|з|и|й|к|л|м|н|о|п|р|с|т|у|ф|х|ц|ч|ш|ђ|ј|љ|њ|ћ|ќ|ѝ|ў|џ
];
source brackets.foma
source roman.foma
source safety.foma
# From PHP, Latin->Cyrillic mapping
define CONVERT'SR'EL NO'BRACKETS .o. BRACKETROMAN(BREAK) .o. [
"[[" \BRACKETS* "]]" @-> ... ,,
{а} @-> {a} ,, {б} @-> {b} ,, {в} @-> {v} ,, {г} @-> {g} ,, {д} @-> {d} ,,
{ђ} @-> {đ} ,, {е} @-> {e} ,, {ж} @-> {ž} ,, {з} @-> {z} ,, {и} @-> {i} ,,
{ј} @-> {j} ,, {к} @-> {k} ,, {л} @-> {l} ,, {љ} @-> {lj} ,, {м} @-> {m} ,,
{н} @-> {n} ,, {њ} @-> {nj} ,, {о} @-> {o} ,, {п} @-> {p} ,, {р} @-> {r} ,,
{с} @-> {s} ,, {т} @-> {t} ,, {ћ} @-> {ć} ,, {у} @-> {u} ,, {ф} @-> {f} ,,
{х} @-> {h} ,, {ц} @-> {c} ,, {ч} @-> {č} ,, {џ} @-> {dž} ,, {ш} @-> {š} ,,
{А} @-> {A} ,, {Б} @-> {B} ,, {В} @-> {V} ,, {Г} @-> {G} ,, {Д} @-> {D} ,,
{Ђ} @-> {Đ} ,, {Е} @-> {E} ,, {Ж} @-> {Ž} ,, {З} @-> {Z} ,, {И} @-> {I} ,,
{Ј} @-> {J} ,, {К} @-> {K} ,, {Л} @-> {L} ,, {Љ} @-> {Lj} ,, {М} @-> {M} ,,
{Н} @-> {N} ,, {Њ} @-> {Nj} ,, {О} @-> {O} ,, {П} @-> {P} ,, {Р} @-> {R} ,,
{С} @-> {S} ,, {Т} @-> {T} ,, {Ћ} @-> {Ć} ,, {У} @-> {U} ,, {Ф} @-> {F} ,,
{Х} @-> {H} ,, {Ц} @-> {C} ,, {Ч} @-> {Č} ,, {Џ} @-> {Dž} ,, {Ш} @-> {Š'}
] .o. REMOVEBRACKETS;
# From PHP, Cyrillic->Latin mapping
define CONVERT'SR'EC NO'BRACKETS .o. BRACKETROMAN(BREAK) .o. [
"[[" \BRACKETS* "]]" @-> ... ,,
{a} @-> {а} ,, {b} @-> {б} ,, {c} @-> {ц} ,, {č} @-> {ч} ,, {ć} @-> {ћ} ,,
{d} @-> {д} ,, {dž} @-> {џ} ,, {đ} @-> {ђ} ,, {e} @-> {е} ,, {f} @-> {ф} ,,
{g} @-> {г} ,, {h} @-> {х} ,, {i} @-> {и} ,, {j} @-> {ј} ,, {k} @-> {к} ,,
{l} @-> {л} ,, {lj} @-> {љ} ,, {m} @-> {м} ,, {n} @-> {н} ,, {nj} @-> {њ} ,,
{o} @-> {о} ,, {p} @-> {п} ,, {r} @-> {р} ,, {s} @-> {с} ,, {š} @-> {ш} ,,
{t} @-> {т} ,, {u} @-> {у} ,, {v} @-> {в} ,, {z} @-> {з} ,, {ž} @-> {ж} ,,
{A} @-> {А} ,, {B} @-> {Б} ,, {C} @-> {Ц} ,, {Č} @-> {Ч} ,, {Ć} @-> {Ћ} ,,
{D} @-> {Д} ,, {Dž} @-> {Џ} ,, {Đ} @-> {Ђ} ,, {E} @-> {Е} ,, {F} @-> {Ф} ,,
{G} @-> {Г} ,, {H} @-> {Х} ,, {I} @-> {И} ,, {J} @-> {Ј} ,, {K} @-> {К} ,,
{L} @-> {Л} ,, {LJ} @-> {Љ} ,, {M} @-> {М} ,, {N} @-> {Н} ,, {NJ} @-> {Њ} ,,
{O} @-> {О} ,, {P} @-> {П} ,, {R} @-> {Р} ,, {S} @-> {С} ,, {Š} @-> {Ш} ,,
{T} @-> {Т} ,, {U} @-> {У} ,, {V} @-> {В} ,, {Z} @-> {З} ,, {Ž} @-> {Ж} ,,
{DŽ} @-> {Џ} ,, {d!ž} @-> {дж} ,, {D!ž} @-> {Дж} ,, {D!Ž} @-> {ДЖ} ,,
{Lj} @-> {Љ} ,, {l!j} @-> {лј} ,, {L!j} @-> {Лј} ,, {L!J} @-> {ЛЈ} ,,
{Nj} @-> {Њ} ,, {n!j} @-> {нј} ,, {N!j} @-> {Нј} ,, {N!J} @-> {НЈ'}
] .o. REMOVEBRACKETS;
# Generate and save the transducers
regex TEST'UPPER'UNIVERSAL(CONVERT'SR'EL);
echo EXPECT[trans-sr-el universal]: 1 (1 = TRUE, 0 = FALSE)
test null
pop stack
regex CONVERT'SR'EL;
minimize net
echo EXPECT[trans-sr-el functional]: 1 (1 = TRUE, 0 = FALSE)
test functional
byte machine
write att trans-sr-el.att
pop stack
regex LONGSAFEWORD'NOT'OK(CONVERT'SR'EL .o. CONVERT'SR'EC, BREAK);
echo EXPECT[brack-sr-el-sr-ec safe]: 1 (1 = TRUE, 0 = FALSE)
test null
print shortest-string
pop stack
regex LONGSAFEWORD(CONVERT'SR'EL .o. CONVERT'SR'EC, BREAK);
minimize net
echo EXPECT[brack-sr-el-sr-ec functional]: 1 (1 = TRUE, 0 = FALSE)
test functional
byte machine
write att brack-sr-el-sr-ec.att
pop stack
regex LONGSAFEWORD'NOT'OK(CONVERT'SR'EL .o. IDENTITY, BREAK);
echo EXPECT[brack-sr-el-noop safe]: 1 (1 = TRUE, 0 = FALSE)
test null
print shortest-string
pop stack
regex LONGSAFEWORD(CONVERT'SR'EL .o. IDENTITY, BREAK);
minimize net
echo EXPECT[brack-sr-el-noop functional]: 1 (1 = TRUE, 0 = FALSE)
test functional
byte machine
write att brack-sr-el-noop.att
pop stack
regex TEST'UPPER'UNIVERSAL(CONVERT'SR'EC);
echo EXPECT[trans-sr-ec universal]: 1 (1 = TRUE, 0 = FALSE)
test null
pop stack
regex CONVERT'SR'EC;
minimize net
echo EXPECT[trans-sr-ec functional]: 1 (1 = TRUE, 0 = FALSE)
test functional
byte machine
write att trans-sr-ec.att
pop stack
regex LONGSAFEWORD'NOT'OK(CONVERT'SR'EC .o. CONVERT'SR'EL, BREAK);
echo EXPECT[brack-sr-ec-sr-el safe]: 1 (1 = TRUE, 0 = FALSE)
test null
print shortest-string
pop stack
regex LONGSAFEWORD(CONVERT'SR'EC .o. CONVERT'SR'EL, BREAK);
minimize net
echo EXPECT[brack-sr-ec-sr-el functional]: 1 (1 = TRUE, 0 = FALSE)
test functional
byte machine
write att brack-sr-ec-sr-el.att
pop stack
regex LONGSAFEWORD'NOT'OK(CONVERT'SR'EC .o. IDENTITY, BREAK);
echo EXPECT[brack-sr-ec-noop safe]: 1 (1 = TRUE, 0 = FALSE)
test null
print shortest-string
pop stack
regex LONGSAFEWORD(CONVERT'SR'EC .o. IDENTITY, BREAK);
minimize net
echo EXPECT[brack-sr-ec-noop functional]: 1 (1 = TRUE, 0 = FALSE)
test functional
byte machine
write att brack-sr-ec-noop.att
pop stack

File Metadata

Mime Type
text/plain
Expires
Aug 16 2026, 15:12 (11 w, 6 d ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
e5/6b/3d8b9a3d85101698d8cae2973631
Default Alt Text
sr.foma (5 KB)

Event Timeline