Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F4065404
sr.foma
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
5 KB
Referenced Files
None
Subscribers
None
sr.foma
View Options
# 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
Details
Attached
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)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment