anchorFix_v2.py 16 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025
  1. from __future__ import print_function
  2. DUPLICATE_ANCHOR_GLYPHS = [
  3. "A",
  4. "A",
  5. "A.smcp",
  6. "A.smcp",
  7. "A.unic",
  8. "A.unic",
  9. "AE",
  10. "AE",
  11. "AE.smcp",
  12. "AE.smcp",
  13. "B",
  14. "B",
  15. "B.smcp",
  16. "B.smcp",
  17. "C",
  18. "C",
  19. "C.smcp",
  20. "C.smcp",
  21. "D",
  22. "D",
  23. "D.smcp",
  24. "D.smcp",
  25. "E",
  26. "E",
  27. "E.smcp",
  28. "E.smcp",
  29. "E.unic",
  30. "E.unic",
  31. "Eng",
  32. "Eng",
  33. "Eng.smcp",
  34. "Eng.smcp",
  35. "Epsilon1",
  36. "Epsilon1",
  37. "Esh",
  38. "Esh",
  39. "F",
  40. "F",
  41. "F.smcp",
  42. "F.smcp",
  43. "G",
  44. "G",
  45. "G.smcp",
  46. "G.smcp",
  47. "Gamma",
  48. "Gamma",
  49. "Gamma.smcp",
  50. "Gamma.smcp",
  51. "Gbar",
  52. "Gbar",
  53. "Gsmallcap",
  54. "Gsmallcap",
  55. "Gsmallcaphook",
  56. "Gsmallcaphook",
  57. "H",
  58. "H",
  59. "H.smcp",
  60. "H.smcp",
  61. "Hbar",
  62. "Hbar",
  63. "Hbar.smcp",
  64. "Hbar.smcp",
  65. "I",
  66. "I",
  67. "I.smcp",
  68. "I.smcp",
  69. "Ibar",
  70. "Ibar",
  71. "Ismallcap",
  72. "Ismallcap",
  73. "J",
  74. "J",
  75. "J.smcp",
  76. "J.smcp",
  77. "K",
  78. "K",
  79. "K.smcp",
  80. "K.smcp",
  81. "L",
  82. "L",
  83. "L.smcp",
  84. "L.smcp",
  85. "Lslash",
  86. "Lslash",
  87. "Lslash.smcp",
  88. "Lslash.smcp",
  89. "Lsmallcap",
  90. "Lsmallcap",
  91. "M",
  92. "M",
  93. "M.smcp",
  94. "M.smcp",
  95. "M.unic",
  96. "M.unic",
  97. "N",
  98. "N",
  99. "N.smcp",
  100. "N.smcp",
  101. "N.unic",
  102. "N.unic",
  103. "Nsmallcap",
  104. "Nsmallcap",
  105. "O",
  106. "O",
  107. "O.smcp",
  108. "O.smcp",
  109. "OE",
  110. "OE",
  111. "OEsmallcap",
  112. "OEsmallcap",
  113. "Ohorn",
  114. "Ohorn",
  115. "Oslash",
  116. "Oslash",
  117. "Oslash.smcp",
  118. "Oslash.smcp",
  119. "P",
  120. "P",
  121. "P.smcp",
  122. "P.smcp",
  123. "Q",
  124. "Q",
  125. "Q.smcp",
  126. "Q.smcp",
  127. "R",
  128. "R",
  129. "R.alt",
  130. "R.alt",
  131. "R.smcp",
  132. "R.smcp",
  133. "Rsmallcap",
  134. "Rsmallcap",
  135. "Rsmallcapinv",
  136. "Rsmallcapinv",
  137. "S",
  138. "S",
  139. "S.smcp",
  140. "S.smcp",
  141. "Schwa",
  142. "Schwa",
  143. "T",
  144. "T",
  145. "T.smcp",
  146. "T.smcp",
  147. "Thorn.smcp",
  148. "Thorn.smcp",
  149. "U",
  150. "U",
  151. "U.smcp",
  152. "U.smcp",
  153. "U.unic",
  154. "U.unic",
  155. "Uhorn",
  156. "Uhorn",
  157. "V",
  158. "V",
  159. "V.smcp",
  160. "V.smcp",
  161. "W",
  162. "W",
  163. "W.smcp",
  164. "W.smcp",
  165. "X",
  166. "X",
  167. "X.smcp",
  168. "X.smcp",
  169. "Y",
  170. "Y",
  171. "Y.smcp",
  172. "Y.smcp",
  173. "Ysmallcap",
  174. "Ysmallcap",
  175. "Z",
  176. "Z",
  177. "Z.smcp",
  178. "Z.smcp",
  179. "Zbar",
  180. "Zbar",
  181. "a",
  182. "a",
  183. "a_uni02DE",
  184. "a_uni02DE",
  185. "ae",
  186. "ae",
  187. "alpha",
  188. "alpha",
  189. "ascript",
  190. "ascript",
  191. "ascriptturn",
  192. "ascriptturn",
  193. "aturn",
  194. "aturn",
  195. "b",
  196. "b",
  197. "babygamma",
  198. "babygamma",
  199. "bbar",
  200. "bbar",
  201. "bbar_uni1ABE",
  202. "bbar_uni1ABE",
  203. "bhook",
  204. "bhook",
  205. "bullseye",
  206. "bullseye",
  207. "c",
  208. "c",
  209. "ccurl",
  210. "ccurl",
  211. "cstretch",
  212. "cstretch",
  213. "d",
  214. "d",
  215. "dcroat",
  216. "dcroat",
  217. "dcroat_uni1ABE",
  218. "dcroat_uni1ABE",
  219. "dhook",
  220. "dhook",
  221. "dotlessi",
  222. "dotlessi",
  223. "drthook",
  224. "drthook",
  225. "dyogh",
  226. "dyogh",
  227. "dz",
  228. "dz",
  229. "dzcurl",
  230. "dzcurl",
  231. "e",
  232. "e",
  233. "eng",
  234. "eng",
  235. "eng_uni1ABE",
  236. "eng_uni1ABE",
  237. "epsilon",
  238. "epsilon",
  239. "epsilon1",
  240. "epsilon1",
  241. "epsilon1rev",
  242. "epsilon1rev",
  243. "epsilon1revclosed",
  244. "epsilon1revclosed",
  245. "epsilon1revhook",
  246. "epsilon1revhook",
  247. "epsilonclosed",
  248. "epsilonclosed",
  249. "erev",
  250. "erev",
  251. "esh",
  252. "esh",
  253. "eshcurl",
  254. "eshcurl",
  255. "eshshortrev",
  256. "eshshortrev",
  257. "eta",
  258. "eta",
  259. "f",
  260. "f",
  261. "finalkaf",
  262. "finalkaf",
  263. "finalmem",
  264. "finalmem",
  265. "finalnun",
  266. "finalnun",
  267. "g",
  268. "g",
  269. "gamma1",
  270. "gamma1",
  271. "gbar",
  272. "gbar",
  273. "gbar_uni1ABE",
  274. "gbar_uni1ABE",
  275. "gcursive",
  276. "gcursive",
  277. "ghook",
  278. "ghook",
  279. "glottalstop",
  280. "glottalstop",
  281. "glottalstopbar",
  282. "glottalstopbar",
  283. "glottalstopbarrev",
  284. "glottalstopbarrev",
  285. "glottalstopinv",
  286. "glottalstopinv",
  287. "glottalstoprevinv",
  288. "glottalstoprevinv",
  289. "h",
  290. "h",
  291. "henghook",
  292. "henghook",
  293. "hhook",
  294. "hhook",
  295. "hturn",
  296. "hturn",
  297. "i",
  298. "i",
  299. "ibar",
  300. "ibar",
  301. "iota",
  302. "iota",
  303. "iota1",
  304. "iota1",
  305. "j",
  306. "j",
  307. "jcrosstail",
  308. "jcrosstail",
  309. "jdotlessbar",
  310. "jdotlessbar",
  311. "jhookdblbar",
  312. "jhookdblbar",
  313. "k",
  314. "k",
  315. "k.alt",
  316. "k.alt",
  317. "kgreenlandic",
  318. "kgreenlandic",
  319. "kturn",
  320. "kturn",
  321. "l",
  322. "l",
  323. "lbar",
  324. "lbar",
  325. "lbelt",
  326. "lbelt",
  327. "lmidtilde",
  328. "lmidtilde",
  329. "longs",
  330. "longs",
  331. "lrthook",
  332. "lrthook",
  333. "lslash",
  334. "lslash",
  335. "lyogh",
  336. "lyogh",
  337. "m",
  338. "m",
  339. "mhook",
  340. "mhook",
  341. "mturn",
  342. "mturn",
  343. "mturndescend",
  344. "mturndescend",
  345. "n",
  346. "n",
  347. "nlfthook",
  348. "nlfthook",
  349. "nrthook",
  350. "nrthook",
  351. "o",
  352. "o",
  353. "oe",
  354. "oe",
  355. "ohorn",
  356. "ohorn",
  357. "omega",
  358. "omega",
  359. "omegaclosed",
  360. "omegaclosed",
  361. "oopen",
  362. "oopen",
  363. "oslash",
  364. "oslash",
  365. "p",
  366. "p",
  367. "philatin",
  368. "philatin",
  369. "psi",
  370. "psi",
  371. "q",
  372. "q",
  373. "qhook",
  374. "qhook",
  375. "r",
  376. "r",
  377. "rdescend",
  378. "rdescend",
  379. "rfishhook",
  380. "rfishhook",
  381. "rfishhookrev",
  382. "rfishhookrev",
  383. "rho",
  384. "rho",
  385. "rrthook",
  386. "rrthook",
  387. "rturn",
  388. "rturn",
  389. "rturnascend",
  390. "rturnascend",
  391. "rturnrthook",
  392. "rturnrthook",
  393. "s",
  394. "s",
  395. "schwa",
  396. "schwa",
  397. "schwahook",
  398. "schwahook",
  399. "srthook",
  400. "srthook",
  401. "t",
  402. "t",
  403. "tccurl",
  404. "tccurl",
  405. "tesh",
  406. "tesh",
  407. "trthook",
  408. "trthook",
  409. "ts",
  410. "ts",
  411. "tturn",
  412. "tturn",
  413. "u",
  414. "u",
  415. "ubar",
  416. "ubar",
  417. "uhorn",
  418. "uhorn",
  419. "uni0069.ccmp",
  420. "uni0069.ccmp",
  421. "uni006A.ccmp",
  422. "uni006A.ccmp",
  423. "uni012F.ccmp",
  424. "uni012F.ccmp",
  425. "uni0237",
  426. "uni0237",
  427. "uni023D",
  428. "uni023D",
  429. "uni0243",
  430. "uni0243",
  431. "uni0244",
  432. "uni0244",
  433. "uni0248",
  434. "uni0248",
  435. "uni0249",
  436. "uni0249",
  437. "uni0249.ccmp",
  438. "uni0249.ccmp",
  439. "uni024C",
  440. "uni024C",
  441. "uni024D",
  442. "uni024D",
  443. "uni024E",
  444. "uni024E",
  445. "uni024F",
  446. "uni024F",
  447. "uni0268.ccmp",
  448. "uni0268.ccmp",
  449. "uni0292",
  450. "uni0292",
  451. "uni0293",
  452. "uni0293",
  453. "uni029D.ccmp",
  454. "uni029D.ccmp",
  455. "uni02A9",
  456. "uni02A9",
  457. "uni02AB",
  458. "uni02AB",
  459. "uni02AC",
  460. "uni02AC",
  461. "uni02AE",
  462. "uni02AE",
  463. "uni02B2.ccmp",
  464. "uni02B2.ccmp",
  465. "uni03D2",
  466. "uni03D2",
  467. "uni03D6",
  468. "uni03D6",
  469. "uni03F3.ccmp",
  470. "uni03F3.ccmp",
  471. "uni0404",
  472. "uni0404",
  473. "uni0404.smcp",
  474. "uni0404.smcp",
  475. "uni0416",
  476. "uni0416",
  477. "uni0416.smcp",
  478. "uni0416.smcp",
  479. "uni0417",
  480. "uni0417",
  481. "uni0417.smcp",
  482. "uni0417.smcp",
  483. "uni0418",
  484. "uni0418",
  485. "uni0418.smcp",
  486. "uni0418.smcp",
  487. "uni0423",
  488. "uni0423",
  489. "uni0423.smcp",
  490. "uni0423.smcp",
  491. "uni0427",
  492. "uni0427",
  493. "uni0427.smcp",
  494. "uni0427.smcp",
  495. "uni042B",
  496. "uni042B",
  497. "uni042B.smcp",
  498. "uni042B.smcp",
  499. "uni042D",
  500. "uni042D",
  501. "uni042D.smcp",
  502. "uni042D.smcp",
  503. "uni042E",
  504. "uni042E",
  505. "uni042E.smcp",
  506. "uni042E.smcp",
  507. "uni042F",
  508. "uni042F",
  509. "uni042F.smcp",
  510. "uni042F.smcp",
  511. "uni0432",
  512. "uni0432",
  513. "uni0433",
  514. "uni0433",
  515. "uni0434",
  516. "uni0434",
  517. "uni0436",
  518. "uni0436",
  519. "uni0437",
  520. "uni0437",
  521. "uni0438",
  522. "uni0438",
  523. "uni043A",
  524. "uni043A",
  525. "uni043B",
  526. "uni043B",
  527. "uni043C",
  528. "uni043C",
  529. "uni043D",
  530. "uni043D",
  531. "uni043F",
  532. "uni043F",
  533. "uni0442",
  534. "uni0442",
  535. "uni0444",
  536. "uni0444",
  537. "uni0446",
  538. "uni0446",
  539. "uni0447",
  540. "uni0447",
  541. "uni0448",
  542. "uni0448",
  543. "uni0449",
  544. "uni0449",
  545. "uni044B",
  546. "uni044B",
  547. "uni044D",
  548. "uni044D",
  549. "uni044E",
  550. "uni044E",
  551. "uni044F",
  552. "uni044F",
  553. "uni0454",
  554. "uni0454",
  555. "uni0456.ccmp",
  556. "uni0456.ccmp",
  557. "uni0458.ccmp",
  558. "uni0458.ccmp",
  559. "uni0460",
  560. "uni0460",
  561. "uni0461",
  562. "uni0461",
  563. "uni046F",
  564. "uni046F",
  565. "uni0472",
  566. "uni0472",
  567. "uni0473",
  568. "uni0473",
  569. "uni0474",
  570. "uni0474",
  571. "uni0475",
  572. "uni0475",
  573. "uni047B",
  574. "uni047B",
  575. "uni047F",
  576. "uni047F",
  577. "uni0480",
  578. "uni0480",
  579. "uni0481",
  580. "uni0481",
  581. "uni048A",
  582. "uni048A",
  583. "uni048B",
  584. "uni048B",
  585. "uni04A8",
  586. "uni04A8",
  587. "uni04A8.smcp",
  588. "uni04A8.smcp",
  589. "uni04A9",
  590. "uni04A9",
  591. "uni04BA",
  592. "uni04BA",
  593. "uni04BA.smcp",
  594. "uni04BA.smcp",
  595. "uni04D8",
  596. "uni04D8",
  597. "uni04D8.smcp",
  598. "uni04D8.smcp",
  599. "uni04E8.smcp",
  600. "uni04E8.smcp",
  601. "uni0504",
  602. "uni0504",
  603. "uni0506",
  604. "uni0506",
  605. "uni050A",
  606. "uni050A",
  607. "uni050C",
  608. "uni050C",
  609. "uni050D",
  610. "uni050D",
  611. "uni050E",
  612. "uni050E",
  613. "uni0510",
  614. "uni0510",
  615. "uni1D00",
  616. "uni1D00",
  617. "uni1D01",
  618. "uni1D01",
  619. "uni1D02",
  620. "uni1D02",
  621. "uni1D03",
  622. "uni1D03",
  623. "uni1D04",
  624. "uni1D04",
  625. "uni1D05",
  626. "uni1D05",
  627. "uni1D06",
  628. "uni1D06",
  629. "uni1D07",
  630. "uni1D07",
  631. "uni1D08",
  632. "uni1D08",
  633. "uni1D09",
  634. "uni1D09",
  635. "uni1D0A",
  636. "uni1D0A",
  637. "uni1D0B",
  638. "uni1D0B",
  639. "uni1D0C",
  640. "uni1D0C",
  641. "uni1D0D",
  642. "uni1D0D",
  643. "uni1D0E",
  644. "uni1D0E",
  645. "uni1D0F",
  646. "uni1D0F",
  647. "uni1D10",
  648. "uni1D10",
  649. "uni1D14",
  650. "uni1D14",
  651. "uni1D15",
  652. "uni1D15",
  653. "uni1D18",
  654. "uni1D18",
  655. "uni1D19",
  656. "uni1D19",
  657. "uni1D1A",
  658. "uni1D1A",
  659. "uni1D1B",
  660. "uni1D1B",
  661. "uni1D1C",
  662. "uni1D1C",
  663. "uni1D20",
  664. "uni1D20",
  665. "uni1D21",
  666. "uni1D21",
  667. "uni1D22",
  668. "uni1D22",
  669. "uni1D23",
  670. "uni1D23",
  671. "uni1D24",
  672. "uni1D24",
  673. "uni1D25",
  674. "uni1D25",
  675. "uni1D26",
  676. "uni1D26",
  677. "uni1D27",
  678. "uni1D27",
  679. "uni1D28",
  680. "uni1D28",
  681. "uni1D29",
  682. "uni1D29",
  683. "uni1D2A",
  684. "uni1D2A",
  685. "uni1D2B",
  686. "uni1D2B",
  687. "uni1D62.ccmp",
  688. "uni1D62.ccmp",
  689. "uni1D6B",
  690. "uni1D6B",
  691. "uni1D6C",
  692. "uni1D6C",
  693. "uni1D6D",
  694. "uni1D6D",
  695. "uni1D6E",
  696. "uni1D6E",
  697. "uni1D6F",
  698. "uni1D6F",
  699. "uni1D70",
  700. "uni1D70",
  701. "uni1D71",
  702. "uni1D71",
  703. "uni1D72",
  704. "uni1D72",
  705. "uni1D73",
  706. "uni1D73",
  707. "uni1D74",
  708. "uni1D74",
  709. "uni1D75",
  710. "uni1D75",
  711. "uni1D76",
  712. "uni1D76",
  713. "uni1D77",
  714. "uni1D77",
  715. "uni1D79",
  716. "uni1D79",
  717. "uni1D7A",
  718. "uni1D7A",
  719. "uni1D7C",
  720. "uni1D7C",
  721. "uni1D7D",
  722. "uni1D7D",
  723. "uni1D7E",
  724. "uni1D7E",
  725. "uni1D7F",
  726. "uni1D7F",
  727. "uni1D80",
  728. "uni1D80",
  729. "uni1D81",
  730. "uni1D81",
  731. "uni1D82",
  732. "uni1D82",
  733. "uni1D83",
  734. "uni1D83",
  735. "uni1D84",
  736. "uni1D84",
  737. "uni1D85",
  738. "uni1D85",
  739. "uni1D86",
  740. "uni1D86",
  741. "uni1D87",
  742. "uni1D87",
  743. "uni1D88",
  744. "uni1D88",
  745. "uni1D89",
  746. "uni1D89",
  747. "uni1D8A",
  748. "uni1D8A",
  749. "uni1D8B",
  750. "uni1D8B",
  751. "uni1D8C",
  752. "uni1D8C",
  753. "uni1D8D",
  754. "uni1D8D",
  755. "uni1D8E",
  756. "uni1D8E",
  757. "uni1D8F",
  758. "uni1D8F",
  759. "uni1D90",
  760. "uni1D90",
  761. "uni1D91",
  762. "uni1D91",
  763. "uni1D92",
  764. "uni1D92",
  765. "uni1D93",
  766. "uni1D93",
  767. "uni1D94",
  768. "uni1D94",
  769. "uni1D95",
  770. "uni1D95",
  771. "uni1D96",
  772. "uni1D96",
  773. "uni1D96.ccmp",
  774. "uni1D96.ccmp",
  775. "uni1D97",
  776. "uni1D97",
  777. "uni1D98",
  778. "uni1D98",
  779. "uni1D99",
  780. "uni1D99",
  781. "uni1D9A",
  782. "uni1D9A",
  783. "uni1DA4.ccmp",
  784. "uni1DA4.ccmp",
  785. "uni1DA8.ccmp",
  786. "uni1DA8.ccmp",
  787. "uni1E2C",
  788. "uni1E2C",
  789. "uni1E2D",
  790. "uni1E2D",
  791. "uni1E2E",
  792. "uni1E2E",
  793. "uni1E2F",
  794. "uni1E2F",
  795. "uni2071.ccmp",
  796. "uni2071.ccmp",
  797. "uni2C7C.ccmp",
  798. "uni2C7C.ccmp",
  799. "upsilon",
  800. "upsilon",
  801. "upsilonlatin",
  802. "upsilonlatin",
  803. "v",
  804. "v",
  805. "vscript",
  806. "vscript",
  807. "vturn",
  808. "vturn",
  809. "w",
  810. "w",
  811. "wturn",
  812. "wturn",
  813. "x",
  814. "x",
  815. "y",
  816. "y",
  817. "yturn",
  818. "yturn",
  819. "z",
  820. "z",
  821. "zbar",
  822. "zbar",
  823. "zcurl",
  824. "zcurl",
  825. "zrthook",
  826. "zrthook"
  827. # mkmk
  828. "uni0351",
  829. "uni0350",
  830. "uni0357",
  831. "uni035B",
  832. "uni0343",
  833. "uni0342",
  834. "acuterightnosp",
  835. "graveleftnosp",
  836. "uni0346",
  837. "diaeresistonosnosp",
  838. "uni034A",
  839. "overscoredblnosp",
  840. "tildevertsupnosp",
  841. "xsupnosp",
  842. "anglesupnosp",
  843. "uni030C_uni1ABB",
  844. "dieresisnosp_uni1ABB",
  845. "uni034C",
  846. "tildecomb_uni1ABB",
  847. "uni0352",
  848. "uni034B",
  849. "macroncomb_uni1ABB",
  850. "tildecomb_uni1ABC",
  851. "tildevertsupnosp",
  852. "overscoredblnosp",
  853. "xsupnosp",
  854. "anglesupnosp",
  855. "uni0357",
  856. "uni0352",
  857. "uni0350",
  858. "uni0351",
  859. "uni035B",
  860. "uni0346",
  861. "diaeresistonosnosp",
  862. "acuterightnosp",
  863. "uni034C",
  864. "uni034B",
  865. "tildecomb_uni1ABC",
  866. "dieresisnosp_uni1ABB",
  867. "tildecomb_uni1ABB",
  868. "uni0342",
  869. "uni0343",
  870. "graveleftnosp",
  871. "uni030C_uni1ABB",
  872. "macroncomb_uni1ABB",
  873. "uni034A"
  874. ]
  875. def duplicate_anchor(glyph, src, dst):
  876. outline = glyph.find('outline')
  877. src_anc = glyph.xpath("//point[@name='{}']".format(src))[0]
  878. dst_anc = glyph.xpath("//point[@name='{}']".format(dst))
  879. if not dst_anc:
  880. dst_anc = copy.deepcopy(src_anc.getparent())
  881. dst_anc.getchildren()[0].attrib['name'] = dst
  882. outline.append(dst_anc)
  883. # def rename_anchor(glyph, src, dst):
  884. # anc = glyph.xpath("//point[@name='{}']".format(src))
  885. # if anc:
  886. # anc[0].attrib['name'] = dst
  887. def duplicate_anchor_v2(glyph, src, dst):
  888. sourceAnchor = src
  889. destAnchor = dst
  890. gname = glyph.name
  891. anchorList = [ g.anchors[anchor].name for anchor in range(len(g.anchors))]
  892. anchorDict = { g.anchors[anchor].name : g.anchors[anchor].position for anchor in range(len(g.anchors))}
  893. #print anchorDict
  894. if not destAnchor in anchorDict.keys():
  895. if sourceAnchor in anchorDict.keys():
  896. anchorPos = anchorDict[sourceAnchor]
  897. anchorName = destAnchor
  898. g.appendAnchor(anchorName, anchorPos)
  899. print ('-', gname, 'anchor added')
  900. def rename_anchor_v2(glyph, src, dst):
  901. #g = f[gname]
  902. g = glyph
  903. if g.anchors:
  904. for a in g.anchors:
  905. aname = a.name
  906. if a.name == src:
  907. oldName = a.name
  908. newName = dst
  909. a.name = newName
  910. print(g.name, ': ', oldName, '>', newName)
  911. # def delete_anchor(glyph, anc_name):
  912. # anc = glyph.xpath("//point[@name='{}']".format(anc_name))
  913. # if anc:
  914. # anc = anc[0].getparent()
  915. # anc.getparent().remove(anc)
  916. def delete_anchor_v2(glyph, anc_name):
  917. #g = f[gname]
  918. g = glyph
  919. if g.anchors:
  920. for a in g.anchors:
  921. if a.name == anc_name:
  922. g.removeAnchor(a)
  923. print(g.name, ': ', a.name, 'removed')
  924. def _delete_design_anchors(glyph):
  925. anchors_to_delete = [
  926. "_ogonek",
  927. "_rhalfring",
  928. "_right",
  929. "_tonos",
  930. "_top",
  931. "_bottom",
  932. "_bottomu",
  933. "_caron",
  934. "_cross",
  935. "_dot",
  936. "_left",
  937. "ogonek",
  938. "rhalfring",
  939. "right",
  940. "tonos",
  941. "bottomu",
  942. "caron",
  943. "cross",
  944. "dot",
  945. "left"
  946. ]
  947. for anchor in anchors_to_delete:
  948. delete_anchor_v2(glyph, anchor)
  949. def _rename_anchors(glyph):
  950. anchors = [
  951. ("_marktop", "_top"),
  952. ("_markbottom", "_bottom"),
  953. ("_marktop_dd", "_top_dd"),
  954. ("_markbottom_dd", "_bottom_dd"),
  955. ("_markrhotichook", "_rhotichook"),
  956. ("_marktop0315", "_top0315"),
  957. ("_markparent_top", "_parent_top"),
  958. ("_markparenthesses.w1", "_parenthesses.w1"),
  959. ("_markparenthesses.w2", "_parenthesses.w2"),
  960. ("_markparenthesses.w3", "_parenthesses.w3"),
  961. ("mkmktop", "top"),
  962. ("mkmkbottom_acc", "bottom"),
  963. ]
  964. for before_anchor, after_anchor in anchors:
  965. rename_anchor_v2(glyph, before_anchor, after_anchor)
  966. fonts = AllFonts()
  967. for f in fonts:
  968. for g in f:
  969. glyph = g
  970. glyph_name = g.name
  971. _delete_design_anchors(glyph)
  972. _rename_anchors(glyph)
  973. if glyph_name in ['cedilla', 'commaaccent', 'ogonek']:
  974. delete_anchor_v2(glyph, 'bottom')
  975. if glyph_name in ['uni1ABB', 'uni1ABC']:
  976. delete_anchor_v2(glyph, '_top')
  977. if glyph_name in DUPLICATE_ANCHOR_GLYPHS:
  978. duplicate_anchor_v2(glyph, "top", "parent_top")