Guest User

Untitled

a guest
Oct 23rd, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.38 KB | None | 0 0
  1. documentclass{article}
  2. usepackage{fontspec}
  3. usepackage{ifluatex,ifxetex}
  4.  
  5. setmainfont[Mapping=cyrillic-to-latin]{texgyreadventor-regular.otf}
  6.  
  7. begin{document}
  8. ifxetex
  9. This is XeTeX
  10. elseifluatex
  11. This is LuaTeX
  12. fifi
  13.  
  14. Hello, world
  15.  
  16. Здравствуй, Мир
  17.  
  18. end{document}
  19.  
  20. ; TECkit mapping for TeX input conventions <-> Unicode characters
  21.  
  22. LHSName "Cyrillic-to-Latin"
  23. RHSName "UNICODE"
  24.  
  25. pass(Unicode)
  26.  
  27. ; ligatures from Knuth's original CMR fonts
  28. U+002D U+002D <> U+2013 ; -- -> en dash
  29. U+002D U+002D U+002D <> U+2014 ; --- -> em dash
  30.  
  31. U+0027 <> U+2019 ; ' -> right single quote
  32. U+0027 U+0027 <> U+201D ; '' -> right double quote
  33. U+0022 > U+201D ; " -> right double quote
  34.  
  35. U+0060 <> U+2018 ; ` -> left single quote
  36. U+0060 U+0060 <> U+201C ; `` -> left double quote
  37.  
  38. U+0021 U+0060 <> U+00A1 ; !` -> inverted exclam
  39. U+003F U+0060 <> U+00BF ; ?` -> inverted question
  40.  
  41. ; additions supported in T1 encoding
  42. U+002C U+002C <> U+201E ; ,, -> DOUBLE LOW-9 QUOTATION MARK
  43. U+003C U+003C <> U+00AB ; << -> LEFT POINTING GUILLEMET
  44. U+003E U+003E <> U+00BB ; >> -> RIGHT POINTING GUILLEMET
  45.  
  46.  
  47. U+0410 <> U+0041 ; A
  48. U+0411 <> U+0042 ; B
  49. U+0412 <> U+0056 ; V
  50. U+0413 <> U+0047 ; G
  51. U+0414 <> U+0044 ; D
  52. U+0415 <> U+0045 ; E
  53. U+0416 <> U+017D ; Ž
  54. U+0417 <> U+005A ; Z
  55. U+0418 <> U+0049 ; I
  56. U+041A <> U+004B ; K
  57. U+041B <> U+004C ; L
  58. U+041C <> U+004D ; M
  59. U+041D <> U+004E ; N
  60. U+041E <> U+004F ; O
  61. U+041F <> U+0050 ; P
  62. U+0420 <> U+0052 ; R
  63. U+0421 <> U+0053 ; S
  64. U+0422 <> U+0054 ; T
  65. U+0423 <> U+0055 ; U
  66. U+0424 <> U+0046 ; F
  67. U+0426 <> U+0043 ; C
  68. U+0427 <> U+010C ; Č
  69. U+0428 <> U+0160 ; Š
  70. U+042D <> U+0116 ; Ė
  71. U+042E <> U+004A U+0075 ; Ju
  72. U+042F <> U+004A U+0061 ; Ja
  73. U+0401 <> U+00CB ; Ë
  74. U+0430 <> U+0061 ; a
  75. U+0431 <> U+0062 ; b
  76. U+0432 <> U+0076 ; v
  77. U+0433 <> U+0067 ; g
  78. U+0434 <> U+0064 ; d
  79. U+0435 <> U+0065 ; e
  80. U+0436 <> U+017E ; ž
  81. U+0437 <> U+007A ; z
  82. U+0438 <> U+0069 ; i
  83. U+0439 <> U+006A ; j
  84. U+043A <> U+006B ; k
  85. U+043B <> U+006C ; l
  86. U+043C <> U+006D ; m
  87. U+043D <> U+006E ; n
  88. U+043E <> U+006F ; o
  89. U+043F <> U+0070 ; p
  90. U+0440 <> U+0072 ; r
  91. U+0441 <> U+0073 ; s
  92. U+0442 <> U+0074 ; t
  93. U+0443 <> U+0075 ; u
  94. U+0444 <> U+0066 ; f
  95. U+0446 <> U+0063 ; c
  96. U+0447 <> U+010D ; č
  97. U+0448 <> U+0161 ; š
  98. U+044D <> U+0117 ; ė
  99. U+044E <> U+006A U+0075 ; ju
  100. U+044F <> U+006A U+0061 ; ja
  101. U+0451 <> U+00EB ; ë
  102. U+0456 <> U+0069 ; i
  103. U+0406 <> U+0049 ; I
  104. U+0454 <> U+006A U+0065 ; je
  105. U+0468 <> U+004A U+0065 ; Je
  106. U+0425 <> U+0043 U+0068 ; Ch
  107. U+0445 <> U+0063 U+0068 ; ch
  108. U+0418 <> U+0049 ; I
  109. U+0429 <> U+0160 U+010D ; Šč
  110. U+042A <> U+0027 ; '
  111. U+042B <> U+0059 ; Y
  112. U+042C <> U+2019 ; '
  113. U+0449 <> U+0161 U+010D ; šč
  114. U+044A <> U+2019 ; '
  115. U+044B <> U+0079 ; y
  116. U+044C <> U+2019 ; '
  117.  
  118. maptofea.lua Convert teckit map files to OpenType feature files
  119. Usage:
  120. texlua maptofea.lua [options] <map file> [glyph list file]
  121. -l,--language (default dflt) language name in OpenType format
  122. -s,--script (default LATN) script name in OpenType format
  123. <map_file> (string) file to be converted
  124. [glyph_list] (defualt glyphlist.txt) file in Adobe glyh list format with unicode to glyph names mapping
  125.  
  126. texlua maptofea.lua cyrillic-to-latin.map > cyrtolatn2.fea
  127.  
  128. languagesystem LATN dflt;
  129. feature liga {
  130. sub hyphen hyphen by endash;
  131. sub hyphen hyphen hyphen by emdash;
  132. sub quotesingle quotesingle by quotedblright;
  133. sub grave grave by quotedblleft;
  134. sub exclam grave by exclamdown;
  135. sub question grave by questiondown;
  136. sub comma comma by quotedblbase;
  137. sub less less by guillemotleft;
  138. sub greater greater by guillemotright;
  139. } liga;
  140. feature ccmp {
  141. sub afii10048 by J u;
  142. sub afii10049 by J a;
  143. sub iucyrillic by j u;
  144. sub iacyrillic by j a;
  145. sub ecyrillic by j e;
  146. sub Yuslittleiotifiedcyrillic by J e;
  147. sub afii10043 by Scaron Ccaron;
  148. sub shchacyrillic by scaron ccaron;
  149. } ccmp;
  150. feature gsub {
  151. sub quotesingle by quoteright;
  152. sub grave by quoteleft;
  153. sub afii10017 by A;
  154. sub afii10018 by B;
  155. sub afii10019 by V;
  156. sub afii10020 by G;
  157. sub afii10021 by D;
  158. sub afii10022 by E;
  159. sub afii10024 by Zcaron;
  160. sub afii10025 by Z;
  161. sub afii10026 by J;
  162. sub afii10028 by K;
  163. sub afii10029 by L;
  164. sub afii10030 by M;
  165. sub afii10031 by N;
  166. sub afii10032 by O;
  167. sub afii10033 by P;
  168. sub afii10034 by R;
  169. sub afii10035 by S;
  170. sub afii10036 by T;
  171. sub afii10037 by U;
  172. sub afii10038 by F;
  173. sub afii10040 by C;
  174. sub afii10041 by Ccaron;
  175. sub afii10042 by Scaron;
  176. sub afii10047 by Edotaccent;
  177. sub afii10023 by Edieresis;
  178. sub afii10065 by a;
  179. sub becyrillic by b;
  180. sub vecyrillic by v;
  181. sub gecyrillic by g;
  182. sub decyrillic by d;
  183. sub iecyrillic by e;
  184. sub zhecyrillic by zcaron;
  185. sub zecyrillic by z;
  186. sub iicyrillic by i;
  187. sub iishortcyrillic by j;
  188. sub kacyrillic by k;
  189. sub elcyrillic by l;
  190. sub emcyrillic by m;
  191. sub encyrillic by n;
  192. sub ocyrillic by o;
  193. sub pecyrillic by p;
  194. sub ercyrillic by r;
  195. sub escyrillic by s;
  196. sub tecyrillic by t;
  197. sub ucyrillic by u;
  198. sub efcyrillic by f;
  199. sub tsecyrillic by c;
  200. sub checyrillic by ccaron;
  201. sub shacyrillic by scaron;
  202. sub ereversedcyrillic by edotaccent;
  203. sub iocyrillic by edieresis;
  204. sub icyrillic by i;
  205. sub afii10055 by I;
  206. sub afii10039 by X;
  207. sub khacyrillic by x;
  208. sub afii10026 by I;
  209. sub afii10044 by quotesingle;
  210. sub afii10045 by Y;
  211. sub afii10046 by quoteright;
  212. sub hardsigncyrillic by quoteright;
  213. sub yericyrillic by y;
  214. sub softsigncyrillic by quoteright;
  215. } gsub;
  216.  
  217. documentclass{article}
  218. usepackage{fontspec}
  219. usepackage{ifluatex,ifxetex}
  220.  
  221. setmainfont[Mapping=cyrillic-to-latin,FeatureFile=cyrtolatn2.fea, RawFeature={+gsub;+liga;}]{Linux Libertine O}
  222.  
  223. begin{document}
  224. ifxetex
  225. This is XeTeX
  226. elseifluatex
  227. This is LuaTeX
  228. fifi
  229.  
  230. Hello,, -- --- world я щ
  231. Здравствуй, Мир
  232.  
  233. end{document}
  234.  
  235. directlua{
  236. fonts.handlers.otf.addfeature {
  237. name = "myliga",
  238. type = "ligature",
  239. data = {
  240. ['Aacute'] = { "А", 0x0301},
  241. ['Eacute'] = { "Е", 0x0301},
  242. ['Iacute'] = { "И", 0x0301},
  243. ['iacute'] = { "и", 0x0301},
  244. ['Oacute'] = { "О", 0x0301},
  245. ['Uacute'] = { "У", 0x0301},
  246. ['Yacute'] = { "Ы", 0x0301},
  247. ['Egrave'] = { "Э", 0x0301},
  248. ['egrave'] = { "э", 0x0301},
  249. },
  250. }
  251. }
  252.  
  253. directlua{
  254. fonts.handlers.otf.addfeature {
  255. name = "mycomp",
  256. type = "multiple",
  257. data = {
  258. afii10039 = { "C", "h" },
  259. afii10087 = { "c", "h" },
  260. afii10048 = { "J", "u" },
  261. afii10049 = { "J", "a" },
  262. afii10096 = { "j", "u" },
  263. afii10097 = { "j", "a" },
  264. Yuslittleiotifiedcyrillic = { "J", "e" },
  265. afii10043 = { "Scaron", "ccaron" },
  266. afii10091 = { "scaron", "ccaron" },
  267. },
  268. }
  269. }
  270.  
  271. directlua{
  272. fonts.handlers.otf.addfeature {
  273. name = "mysub",
  274. type = "substitution",
  275. data = {
  276. ["quotesingle"] = "quoteright",
  277. ["grave"] = "quoteleft",
  278. ["afii10017"] = "A",
  279. ["afii10018"] = "B",
  280. ["afii10019"] = "V",
  281. ["afii10020"] = "G",
  282. ["afii10021"] = "D",
  283. ["afii10022"] = "E",
  284. ["afii10024"] = "Zcaron",
  285. ["afii10025"] = "Z",
  286. ["afii10026"] = "I",
  287. ["afii10027"] = "J",
  288. ["afii10028"] = "K",
  289. ["afii10029"] = "L",
  290. ["afii10030"] = "M",
  291. ["afii10031"] = "N",
  292. ["afii10032"] = "O",
  293. ["afii10033"] = "P",
  294. ["afii10034"] = "R",
  295. ["afii10035"] = "S",
  296. ["afii10036"] = "T",
  297. ["afii10037"] = "U",
  298. ["afii10038"] = "F",
  299. ["afii10040"] = "C",
  300. ["afii10041"] = "Ccaron",
  301. ["afii10042"] = "Scaron",
  302. ["afii10047"] = "Edotaccent",
  303. ["afii10023"] = "Edieresis",
  304. ["afii10065"] = "a",
  305. ["afii10066"] = "b",
  306. ["afii10067"] = "v",
  307. ["afii10068"] = "g",
  308. ["afii10069"] = "d",
  309. ["afii10070"] = "e",
  310. ["afii10072"] = "zcaron",
  311. ["afii10073"] = "z",
  312. ["afii10074"] = "i",
  313. ["afii10075"] = "j",
  314. ["afii10076"] = "k",
  315. ["afii10077"] = "l",
  316. ["afii10078"] = "m",
  317. ["afii10079"] = "n",
  318. ["afii10080"] = "o",
  319. ["afii10081"] = "p",
  320. ["afii10082"] = "r",
  321. ["afii10083"] = "s",
  322. ["afii10084"] = "t",
  323. ["afii10085"] = "u",
  324. ["afii10086"] = "f",
  325. ["afii10088"] = "c",
  326. ["afii10089"] = "ccaron",
  327. ["afii10090"] = "scaron",
  328. ["afii10095"] = "edotaccent",
  329. ["afii10071"] = "edieresis",
  330. ["afii10103"] = "i",
  331. ["afii10055"] = "I",
  332. ["afii10026"] = "I",
  333. ["afii10044"] = "quoteright",
  334. ["afii10045"] = "Y",
  335. ["afii10046"] = "quoteright",
  336. ["afii10092"] = "quoteright",
  337. ["afii10093"] = "y",
  338. ["afii10094"] = "quoteright",
  339. },
  340. }
  341. }
  342.  
  343. setmainfont{Linux Libertine O}[RawFeature={+mysub;+mycomp;+myliga}]
  344.  
  345. documentclass{article}
  346. usepackage{fontspec}
  347. usepackage{ifluatex,ifxetex}
  348.  
  349. setmainfont[Mapping=cyrillic-to-latin]{texgyreadventor-regular.otf}
  350.  
  351. begin{document}
  352. ifxetex
  353. This is XeTeX
  354. elseifluatex
  355. This is LuaTeX
  356.  
  357. directlua{require("cyrtr")}
  358.  
  359. fi
  360.  
  361. Hello, world
  362.  
  363. Здравствуй, Мир
  364.  
  365. end{document}
  366.  
  367. function cyrtr (s)
  368. return
  369. string.gsub(
  370. string.gsub(
  371. string.gsub(
  372. string.gsub(
  373. string.gsub(
  374. string.gsub(
  375. string.gsub(
  376. string.gsub(
  377. string.gsub(
  378. string.gsub(
  379. string.gsub(
  380. string.gsub(
  381. string.gsub(
  382. string.gsub(
  383. string.gsub(
  384. string.gsub(
  385. string.gsub(
  386. string.gsub(
  387. string.gsub(
  388. string.gsub(
  389. string.gsub(
  390. string.gsub(
  391. string.gsub(
  392. string.gsub(
  393. string.gsub(
  394. string.gsub(
  395. string.gsub(
  396. string.gsub(
  397. string.gsub(
  398. string.gsub(
  399. string.gsub(
  400. string.gsub(
  401. string.gsub(
  402. string.gsub(
  403. string.gsub(
  404. string.gsub(
  405. string.gsub(
  406. string.gsub(
  407. string.gsub(
  408. string.gsub(
  409. string.gsub(
  410. string.gsub(
  411. string.gsub(
  412. string.gsub(
  413. string.gsub(
  414. string.gsub(
  415. string.gsub(
  416. string.gsub(
  417. string.gsub(
  418. string.gsub(
  419. string.gsub(
  420. string.gsub(
  421. string.gsub(
  422. string.gsub(
  423. string.gsub(
  424. string.gsub(
  425. string.gsub(
  426. string.gsub(
  427. string.gsub(
  428. string.gsub(
  429. string.gsub(
  430. string.gsub(
  431. string.gsub(
  432. string.gsub(
  433. string.gsub(
  434. string.gsub(
  435. s,
  436. 'А','A'),
  437. 'Б','B'),
  438. 'В','V'),
  439. 'Г','G'),
  440. 'Д','D'),
  441. 'Е','E'),
  442. 'Ж','Ž'),
  443. 'З','Z'),
  444. 'И','I'),
  445. 'К','K'),
  446. 'Л','L'),
  447. 'М','M'),
  448. 'Н','N'),
  449. 'О','O'),
  450. 'П','P'),
  451. 'Р','R'),
  452. 'С','S'),
  453. 'Т','T'),
  454. 'У','U'),
  455. 'Ф','F'),
  456. 'Ц','C'),
  457. 'Ч','Č'),
  458. 'Ш','Š'),
  459. 'Э','Ė'),
  460. 'Ю','Ju'),
  461. 'Я','Ja'),
  462. 'Ё','Ë'),
  463. 'а','a'),
  464. 'б','b'),
  465. 'в','v'),
  466. 'г','g'),
  467. 'д','d'),
  468. 'е','e'),
  469. 'ж','ž'),
  470. 'з','z'),
  471. 'и','i'),
  472. 'й','j'),
  473. 'к','k'),
  474. 'л','l'),
  475. 'м','m'),
  476. 'н','n'),
  477. 'о','o'),
  478. 'п','p'),
  479. 'р','r'),
  480. 'с','s'),
  481. 'т','t'),
  482. 'у','u'),
  483. 'ф','f'),
  484. 'ц','c'),
  485. 'ч','č'),
  486. 'ш','š'),
  487. 'э','ė'),
  488. 'ю','ju'),
  489. 'я','ja'),
  490. 'ё','ë'),
  491. 'і','i'),
  492. 'І','I'),
  493. 'є','je'),
  494. 'Ѩ','Je'),
  495. 'Х','X'),
  496. 'х','x'),
  497. 'И','I'),
  498. 'Щ','Šč'),
  499. 'Ы','Y'),
  500. 'щ','šč'),
  501. 'ы','y')
  502. end
  503.  
  504.  
  505. luatexbase.add_to_callback(
  506. "process_input_buffer",
  507. cyrtr,
  508. "cyrillic transliteration")
Add Comment
Please, Sign In to add comment