Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- documentclass{article}
- usepackage{fontspec}
- usepackage{ifluatex,ifxetex}
- setmainfont[Mapping=cyrillic-to-latin]{texgyreadventor-regular.otf}
- begin{document}
- ifxetex
- This is XeTeX
- elseifluatex
- This is LuaTeX
- fifi
- Hello, world
- Здравствуй, Мир
- end{document}
- ; TECkit mapping for TeX input conventions <-> Unicode characters
- LHSName "Cyrillic-to-Latin"
- RHSName "UNICODE"
- pass(Unicode)
- ; ligatures from Knuth's original CMR fonts
- U+002D U+002D <> U+2013 ; -- -> en dash
- U+002D U+002D U+002D <> U+2014 ; --- -> em dash
- U+0027 <> U+2019 ; ' -> right single quote
- U+0027 U+0027 <> U+201D ; '' -> right double quote
- U+0022 > U+201D ; " -> right double quote
- U+0060 <> U+2018 ; ` -> left single quote
- U+0060 U+0060 <> U+201C ; `` -> left double quote
- U+0021 U+0060 <> U+00A1 ; !` -> inverted exclam
- U+003F U+0060 <> U+00BF ; ?` -> inverted question
- ; additions supported in T1 encoding
- U+002C U+002C <> U+201E ; ,, -> DOUBLE LOW-9 QUOTATION MARK
- U+003C U+003C <> U+00AB ; << -> LEFT POINTING GUILLEMET
- U+003E U+003E <> U+00BB ; >> -> RIGHT POINTING GUILLEMET
- U+0410 <> U+0041 ; A
- U+0411 <> U+0042 ; B
- U+0412 <> U+0056 ; V
- U+0413 <> U+0047 ; G
- U+0414 <> U+0044 ; D
- U+0415 <> U+0045 ; E
- U+0416 <> U+017D ; Ž
- U+0417 <> U+005A ; Z
- U+0418 <> U+0049 ; I
- U+041A <> U+004B ; K
- U+041B <> U+004C ; L
- U+041C <> U+004D ; M
- U+041D <> U+004E ; N
- U+041E <> U+004F ; O
- U+041F <> U+0050 ; P
- U+0420 <> U+0052 ; R
- U+0421 <> U+0053 ; S
- U+0422 <> U+0054 ; T
- U+0423 <> U+0055 ; U
- U+0424 <> U+0046 ; F
- U+0426 <> U+0043 ; C
- U+0427 <> U+010C ; Č
- U+0428 <> U+0160 ; Š
- U+042D <> U+0116 ; Ė
- U+042E <> U+004A U+0075 ; Ju
- U+042F <> U+004A U+0061 ; Ja
- U+0401 <> U+00CB ; Ë
- U+0430 <> U+0061 ; a
- U+0431 <> U+0062 ; b
- U+0432 <> U+0076 ; v
- U+0433 <> U+0067 ; g
- U+0434 <> U+0064 ; d
- U+0435 <> U+0065 ; e
- U+0436 <> U+017E ; ž
- U+0437 <> U+007A ; z
- U+0438 <> U+0069 ; i
- U+0439 <> U+006A ; j
- U+043A <> U+006B ; k
- U+043B <> U+006C ; l
- U+043C <> U+006D ; m
- U+043D <> U+006E ; n
- U+043E <> U+006F ; o
- U+043F <> U+0070 ; p
- U+0440 <> U+0072 ; r
- U+0441 <> U+0073 ; s
- U+0442 <> U+0074 ; t
- U+0443 <> U+0075 ; u
- U+0444 <> U+0066 ; f
- U+0446 <> U+0063 ; c
- U+0447 <> U+010D ; č
- U+0448 <> U+0161 ; š
- U+044D <> U+0117 ; ė
- U+044E <> U+006A U+0075 ; ju
- U+044F <> U+006A U+0061 ; ja
- U+0451 <> U+00EB ; ë
- U+0456 <> U+0069 ; i
- U+0406 <> U+0049 ; I
- U+0454 <> U+006A U+0065 ; je
- U+0468 <> U+004A U+0065 ; Je
- U+0425 <> U+0043 U+0068 ; Ch
- U+0445 <> U+0063 U+0068 ; ch
- U+0418 <> U+0049 ; I
- U+0429 <> U+0160 U+010D ; Šč
- U+042A <> U+0027 ; '
- U+042B <> U+0059 ; Y
- U+042C <> U+2019 ; '
- U+0449 <> U+0161 U+010D ; šč
- U+044A <> U+2019 ; '
- U+044B <> U+0079 ; y
- U+044C <> U+2019 ; '
- maptofea.lua Convert teckit map files to OpenType feature files
- Usage:
- texlua maptofea.lua [options] <map file> [glyph list file]
- -l,--language (default dflt) language name in OpenType format
- -s,--script (default LATN) script name in OpenType format
- <map_file> (string) file to be converted
- [glyph_list] (defualt glyphlist.txt) file in Adobe glyh list format with unicode to glyph names mapping
- texlua maptofea.lua cyrillic-to-latin.map > cyrtolatn2.fea
- languagesystem LATN dflt;
- feature liga {
- sub hyphen hyphen by endash;
- sub hyphen hyphen hyphen by emdash;
- sub quotesingle quotesingle by quotedblright;
- sub grave grave by quotedblleft;
- sub exclam grave by exclamdown;
- sub question grave by questiondown;
- sub comma comma by quotedblbase;
- sub less less by guillemotleft;
- sub greater greater by guillemotright;
- } liga;
- feature ccmp {
- sub afii10048 by J u;
- sub afii10049 by J a;
- sub iucyrillic by j u;
- sub iacyrillic by j a;
- sub ecyrillic by j e;
- sub Yuslittleiotifiedcyrillic by J e;
- sub afii10043 by Scaron Ccaron;
- sub shchacyrillic by scaron ccaron;
- } ccmp;
- feature gsub {
- sub quotesingle by quoteright;
- sub grave by quoteleft;
- sub afii10017 by A;
- sub afii10018 by B;
- sub afii10019 by V;
- sub afii10020 by G;
- sub afii10021 by D;
- sub afii10022 by E;
- sub afii10024 by Zcaron;
- sub afii10025 by Z;
- sub afii10026 by J;
- sub afii10028 by K;
- sub afii10029 by L;
- sub afii10030 by M;
- sub afii10031 by N;
- sub afii10032 by O;
- sub afii10033 by P;
- sub afii10034 by R;
- sub afii10035 by S;
- sub afii10036 by T;
- sub afii10037 by U;
- sub afii10038 by F;
- sub afii10040 by C;
- sub afii10041 by Ccaron;
- sub afii10042 by Scaron;
- sub afii10047 by Edotaccent;
- sub afii10023 by Edieresis;
- sub afii10065 by a;
- sub becyrillic by b;
- sub vecyrillic by v;
- sub gecyrillic by g;
- sub decyrillic by d;
- sub iecyrillic by e;
- sub zhecyrillic by zcaron;
- sub zecyrillic by z;
- sub iicyrillic by i;
- sub iishortcyrillic by j;
- sub kacyrillic by k;
- sub elcyrillic by l;
- sub emcyrillic by m;
- sub encyrillic by n;
- sub ocyrillic by o;
- sub pecyrillic by p;
- sub ercyrillic by r;
- sub escyrillic by s;
- sub tecyrillic by t;
- sub ucyrillic by u;
- sub efcyrillic by f;
- sub tsecyrillic by c;
- sub checyrillic by ccaron;
- sub shacyrillic by scaron;
- sub ereversedcyrillic by edotaccent;
- sub iocyrillic by edieresis;
- sub icyrillic by i;
- sub afii10055 by I;
- sub afii10039 by X;
- sub khacyrillic by x;
- sub afii10026 by I;
- sub afii10044 by quotesingle;
- sub afii10045 by Y;
- sub afii10046 by quoteright;
- sub hardsigncyrillic by quoteright;
- sub yericyrillic by y;
- sub softsigncyrillic by quoteright;
- } gsub;
- documentclass{article}
- usepackage{fontspec}
- usepackage{ifluatex,ifxetex}
- setmainfont[Mapping=cyrillic-to-latin,FeatureFile=cyrtolatn2.fea, RawFeature={+gsub;+liga;}]{Linux Libertine O}
- begin{document}
- ifxetex
- This is XeTeX
- elseifluatex
- This is LuaTeX
- fifi
- Hello,, -- --- world я щ
- Здравствуй, Мир
- end{document}
- directlua{
- fonts.handlers.otf.addfeature {
- name = "myliga",
- type = "ligature",
- data = {
- ['Aacute'] = { "А", 0x0301},
- ['Eacute'] = { "Е", 0x0301},
- ['Iacute'] = { "И", 0x0301},
- ['iacute'] = { "и", 0x0301},
- ['Oacute'] = { "О", 0x0301},
- ['Uacute'] = { "У", 0x0301},
- ['Yacute'] = { "Ы", 0x0301},
- ['Egrave'] = { "Э", 0x0301},
- ['egrave'] = { "э", 0x0301},
- },
- }
- }
- directlua{
- fonts.handlers.otf.addfeature {
- name = "mycomp",
- type = "multiple",
- data = {
- afii10039 = { "C", "h" },
- afii10087 = { "c", "h" },
- afii10048 = { "J", "u" },
- afii10049 = { "J", "a" },
- afii10096 = { "j", "u" },
- afii10097 = { "j", "a" },
- Yuslittleiotifiedcyrillic = { "J", "e" },
- afii10043 = { "Scaron", "ccaron" },
- afii10091 = { "scaron", "ccaron" },
- },
- }
- }
- directlua{
- fonts.handlers.otf.addfeature {
- name = "mysub",
- type = "substitution",
- data = {
- ["quotesingle"] = "quoteright",
- ["grave"] = "quoteleft",
- ["afii10017"] = "A",
- ["afii10018"] = "B",
- ["afii10019"] = "V",
- ["afii10020"] = "G",
- ["afii10021"] = "D",
- ["afii10022"] = "E",
- ["afii10024"] = "Zcaron",
- ["afii10025"] = "Z",
- ["afii10026"] = "I",
- ["afii10027"] = "J",
- ["afii10028"] = "K",
- ["afii10029"] = "L",
- ["afii10030"] = "M",
- ["afii10031"] = "N",
- ["afii10032"] = "O",
- ["afii10033"] = "P",
- ["afii10034"] = "R",
- ["afii10035"] = "S",
- ["afii10036"] = "T",
- ["afii10037"] = "U",
- ["afii10038"] = "F",
- ["afii10040"] = "C",
- ["afii10041"] = "Ccaron",
- ["afii10042"] = "Scaron",
- ["afii10047"] = "Edotaccent",
- ["afii10023"] = "Edieresis",
- ["afii10065"] = "a",
- ["afii10066"] = "b",
- ["afii10067"] = "v",
- ["afii10068"] = "g",
- ["afii10069"] = "d",
- ["afii10070"] = "e",
- ["afii10072"] = "zcaron",
- ["afii10073"] = "z",
- ["afii10074"] = "i",
- ["afii10075"] = "j",
- ["afii10076"] = "k",
- ["afii10077"] = "l",
- ["afii10078"] = "m",
- ["afii10079"] = "n",
- ["afii10080"] = "o",
- ["afii10081"] = "p",
- ["afii10082"] = "r",
- ["afii10083"] = "s",
- ["afii10084"] = "t",
- ["afii10085"] = "u",
- ["afii10086"] = "f",
- ["afii10088"] = "c",
- ["afii10089"] = "ccaron",
- ["afii10090"] = "scaron",
- ["afii10095"] = "edotaccent",
- ["afii10071"] = "edieresis",
- ["afii10103"] = "i",
- ["afii10055"] = "I",
- ["afii10026"] = "I",
- ["afii10044"] = "quoteright",
- ["afii10045"] = "Y",
- ["afii10046"] = "quoteright",
- ["afii10092"] = "quoteright",
- ["afii10093"] = "y",
- ["afii10094"] = "quoteright",
- },
- }
- }
- setmainfont{Linux Libertine O}[RawFeature={+mysub;+mycomp;+myliga}]
- documentclass{article}
- usepackage{fontspec}
- usepackage{ifluatex,ifxetex}
- setmainfont[Mapping=cyrillic-to-latin]{texgyreadventor-regular.otf}
- begin{document}
- ifxetex
- This is XeTeX
- elseifluatex
- This is LuaTeX
- directlua{require("cyrtr")}
- fi
- Hello, world
- Здравствуй, Мир
- end{document}
- function cyrtr (s)
- return
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- string.gsub(
- s,
- 'А','A'),
- 'Б','B'),
- 'В','V'),
- 'Г','G'),
- 'Д','D'),
- 'Е','E'),
- 'Ж','Ž'),
- 'З','Z'),
- 'И','I'),
- 'К','K'),
- 'Л','L'),
- 'М','M'),
- 'Н','N'),
- 'О','O'),
- 'П','P'),
- 'Р','R'),
- 'С','S'),
- 'Т','T'),
- 'У','U'),
- 'Ф','F'),
- 'Ц','C'),
- 'Ч','Č'),
- 'Ш','Š'),
- 'Э','Ė'),
- 'Ю','Ju'),
- 'Я','Ja'),
- 'Ё','Ë'),
- 'а','a'),
- 'б','b'),
- 'в','v'),
- 'г','g'),
- 'д','d'),
- 'е','e'),
- 'ж','ž'),
- 'з','z'),
- 'и','i'),
- 'й','j'),
- 'к','k'),
- 'л','l'),
- 'м','m'),
- 'н','n'),
- 'о','o'),
- 'п','p'),
- 'р','r'),
- 'с','s'),
- 'т','t'),
- 'у','u'),
- 'ф','f'),
- 'ц','c'),
- 'ч','č'),
- 'ш','š'),
- 'э','ė'),
- 'ю','ju'),
- 'я','ja'),
- 'ё','ë'),
- 'і','i'),
- 'І','I'),
- 'є','je'),
- 'Ѩ','Je'),
- 'Х','X'),
- 'х','x'),
- 'И','I'),
- 'Щ','Šč'),
- 'Ы','Y'),
- 'щ','šč'),
- 'ы','y')
- end
- luatexbase.add_to_callback(
- "process_input_buffer",
- cyrtr,
- "cyrillic transliteration")
Add Comment
Please, Sign In to add comment