Сейчас модно придумывать всякие транслиты. Моя прога позволить вам сразу же посмотреть ваш транслит в деле. Вы можете "перевести" html-файл и подсчитать "выбухание" вашего транслита. Распух ли файл и как он теперь смотрится?
При помощи TRANS можно изменить кодировку вашего текста или снять шапочки с букв Эсперанто или вернуть шапочки на место. Всё, что от вас требуется - составить файл замен. Вы можете заменять как отдельные символы, так и их последовательности, причём с учётом окружения слева и справа.
Входной файл не обязан быть текстовым - можно, в частности, за один проход, заменить все сообщения в EXE-файле. Вам доступен исходник на СИ проги TRANS, исходник с подробными комментариями. Наслаждайтесь!
Universalny transliterator ~~~~~~~~~~~~~~~~~~~~~~~~~~ Proga TRANS, osuwestvlaet kak postrocnu transliteratsiu s konsoli, trans fajl_zamen tak i transliteratsiu tselogo fajla source, v poslednem slucae vyzov: trans fajl_zamen source result Fajl zamen iwetsa snacala v tekuwej direktorii, a esli ego tam net, to v direktorii, gde najdena proga TRANS.EXE Fajl zamen sostoit iz trjoh castej 1. zameny po defoltu 2. stroki kontekstnoj zameny 3. kommentarii Obqzatelnymi qvlajutsa tolko dve pervye stroki opredelajuwie zamenu po defoltu. Snacala zadaem stroku bajtov, kaxdyj iz kotoryh podlexat zamene, a srazu pod nej stroku bajtov na kotorye zamenqem (bajt na bajt). Obe stroki, ponqtnoe delo, dolxny imetj odinakovu dlinu. Pervye bajty etih strok imejut osoboe znacenie, oni ne dla zameny ukazany. Esli transliteriruetsa html-dokument, to nado v pervyh bajtah pomestitj '<' i '>', togda tekst vnutri uglovyh skobok <...> perevoditsa ne budet. Esli xe v pervyh bajtah ukazano cto-libo drugoe, to ih soderximoe ignoriruetsa. Rekomenduju ukazyvatj simvoly '0'. Kstati, moq proga moxet zamenitj luboj nenulevoj bajt na luboj drugoj nenulevoj. Nulevoj bajt menqtj nelzq. Simvol '0' zamenitj moxno, esli on ukazan ne v nacale stroki. Esli v kaxdoj iz pervyh dvuh strok ukazatj _edinstvennyj_ simvol (skaxem, '0'), to zamen po defoltu nikakih ne budet. Posle dvuh obqzatelnyh strok moxno zadatj stroki kontekstnoj zameny, pricom oni budut primenqtsa v _pervu oceredj_, do zamen po defoltu Struktura stroki kontekstnoj zameny: dano[+L(...)][+R(...)]:rezultat dano - zamenqema podstroka, ne pustaq rezultat - na cto menqem "dano", eta stroka moxet bytj pustoj Obe eti podstroki mogut soderxatj _probely_ i simvoly granitsy stroki "\r\n" Optsionalno ukazyvaem nabory _odinocnyh_ simvolov, kotorye dolxny stoqtj sleva (L) ili sprava (R) ot 'dano' Esli vmesto +L() napisatj -L(), to etim opredelim, kakie simvoly _ne_ dolxny stoqtj sleva ot 'dano', ctoby stroka zameny srabotala Analogicno nado ponimatj -R(). Esli my hotim, ctoby simvoly '+', '-', ')' ili ':' ne rassmatrivalisj kak upravlajuwie, to stavim pered nimi "obratny slew" >>\<<, kotoryj vypolnqet rolj ekrana. Dvojnoj slew >>\\<< ponimaetsa kak odinocnyj neekranirujuwi slew. V strokah zameny moxno tak oboznacitj ogranicitelnye bajty: \r - vozvrat karetki (13) \n - perevod stroki (10) Stroka kontekstnoj zameny moxet bytj okruxena pustymi strokami ili strokami, kotorye ne soderxat ':' (ih moxno scitatj kommentariem) Esli v fajle zamen vsrecaetsa stroka "---", to ego scityvanie prekrawaetsa i stroki nixe moxno scitatj kommentariem Esli tekuwi kusok ishodnogo fajla ne perevoditsa ni odnoj strokoj zameny, to pytaemsa zamenitj bajt po defoltu, esli xe ego _ne_ okazyvaetsa v _pervoj_ stroke fajla zamen, to prosto _kopiruem_ etot bajt v rezultirujuwi fajl. Ogranicenia na dlinu stroki vhodnogo fajla net, poskolku on scityvaetsa ne postrocno, a pobajtovo v binarnom rexime. Moxno poprobovatj zamenitj slova v exe-fajle na slova toj xe dliny, ocevidno, slova ili frazy ne dolxny bytj korotkimi, ctoby ne zamenitj liwnego v kode progi. Kolicestvo proizvedjonnyh kontekstnyh zamen vyvoditsa na ekran. Ogranicenia: ~~~~~~~~~~~~ Fajl zamen dolxen bytj tekstovym s \r\n ili \n na kontse strok V fajle zamen stroki ne mogut bytj dlinnee 256 simvolov (bez ucota \r\n) V pervyh dvuh strokah "zamen po umolcaniy" nedopustim '\0' V strokah kontekstnyh zamen nedopustim nulevoj bajt '\0' i bajt '\1'. Stroka 'dano' ne dolxna bytj pustoj Dlina strok 'dano', 'rezultat' i strok vnutri skobok L(), R() ne bolee 79 Kolicestvo strok kontekstnoj zameny - 180 maksimum Pri scityvanie _s konsoli_, obrabotka vhodnoj informatsii proishodit postrocno, ctoby srazu videtj rezultat transiteratsii posle naxatia Enter, pri etom voznikajut ponqtnye ogranicenia na ispolzovanie \r\n v strokah kontekstnoj zameny. Dlinnyh imjon fajlov dosovska versia progi ne ponimaet, tolko (8+3).