From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: handa@gnu.org (K. Handa) Newsgroups: gmane.emacs.devel Subject: Re: otf ligature rendering support? Date: Sun, 04 Jan 2015 00:16:55 +0900 Message-ID: <87egrb3ndk.fsf@gnu.org> References: NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Trace: ger.gmane.org 1420298247 20240 80.91.229.3 (3 Jan 2015 15:17:27 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Sat, 3 Jan 2015 15:17:27 +0000 (UTC) Cc: emacs-devel@gnu.org To: Yuri D'Elia Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Sat Jan 03 16:17:21 2015 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1Y7QS8-0004Hj-DB for ged-emacs-devel@m.gmane.org; Sat, 03 Jan 2015 16:17:20 +0100 Original-Received: from localhost ([::1]:54604 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Y7QS7-00052n-PC for ged-emacs-devel@m.gmane.org; Sat, 03 Jan 2015 10:17:19 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:50965) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Y7QRr-00052S-QK for emacs-devel@gnu.org; Sat, 03 Jan 2015 10:17:04 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Y7QRo-0004Uk-Iy for emacs-devel@gnu.org; Sat, 03 Jan 2015 10:17:03 -0500 Original-Received: from fencepost.gnu.org ([2001:4830:134:3::e]:43712) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Y7QRo-0004Ug-FM for emacs-devel@gnu.org; Sat, 03 Jan 2015 10:17:00 -0500 Original-Received: from fl1-122-134-99-48.iba.mesh.ad.jp ([122.134.99.48]:41448 helo=tinhau) by fencepost.gnu.org with esmtpsa (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1Y7QRn-0007TQ-D8; Sat, 03 Jan 2015 10:17:00 -0500 Original-Received: from handa by tinhau with local (Exim 4.80) (envelope-from ) id 1Y7QRj-0001u5-IH; Sun, 04 Jan 2015 00:16:55 +0900 In-Reply-To: (message from Yuri D'Elia on Fri, 02 Jan 2015 16:25:42 +0100) X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2001:4830:134:3::e X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:180940 Archived-At: --=-=-= Content-Type: text/plain In article , Yuri D'Elia writes: > I'm not fully aware of how much otf is supported in emacs, but I found a > good reason to want ligatures in a monospaced font: > http://www.fsd.it/fonts/pragmatapro/PragmataPro_Haskell_liga.png > PragmataPro supports ligatures for a good set of common operators. This > makes it much less troublesome than "prettify-symbols-mode" since > indentation/spacing is not changed. > How would I enable the proper GSUB feature in emacs? Are ligatures > supported at all? Currently, Emacs can not control which OTF features to apply. Emacs leaves it to font drivers on eash platform. I actually tried to give Emacs such facility, and src/font.c contains not-yet-finished code within "#if 0" and "#endif". I want to finish the code, but I'm not sure I can work on it soon. > I can specify otf parameters in `font-spec', but the following: > (set-fontset-font nil 'latin > (font-spec :family "PragmataPro" > :otf '(latn nil (liga)))) > Doesn't really show any ligatures (or any other otf feature). The above just tells Emacs to select such an OTF font that has `liga' GPOS feature for `latn' script. By the way, if you are running Emacs on X with libm17n-flt and libotf libraries, you can override the default behavior of those libraries by putting the attached two files under ~/.m17n.d/. It assumes that the family name of PragmataPro font is "PragmataPro". If that is not the case, please replace "PragmataPro" in generic.fst with a proper family name. --- K. Handa handa@gnu.org --=-=-= Content-Type: application/octet-stream Content-Disposition: attachment; filename=generic.fst Content-Transfer-Encoding: base64 OzsgZ2VuZXJpYy5mc3QgLS0gRm9udHNldCBtYWlubHkgdXNpbmcgZ2VuZXJpYyBmb250IHNwZWNz Lgo7OyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMTAgIEFJU1QgKEgxNVBSTzEx MikKOzsgU2VlIHRoZSBlbmQgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4KCjs7OyA8bGk+IGdlbmVy aWMuZnN0Cjs7Owo7OzsgRm9udHNldCBtYWlubHkgdXNpbmcgZ2VuZXJpYyBmb250IHNwZWNpZmlj YXRpb25zLiAgU2VlIHRoZQo7OzsgZG9jdW1lbnRhdGlvbiBvZiB0aGUgZm9udHNldCAiZGVmYXVs dCIgZm9yIHRoZSBpbmZvcm1hdGlvbiBhYm91dAo7OzsgZWFjaCBmb250LgoKKGxhdGluCiAodmkK ICAoKG5pbCBQcmFnbWF0YVBybyB1bmljb2RlLWJtcCkgY29tYmluaW5nKQogICgobmlsIG5pbCB1 bmljb2RlLWJtcCA6bGFuZz12aSkpKQogKG5pbAogICgobmlsIFByYWdtYXRhUHJvIHVuaWNvZGUt Ym1wKSBjb21iaW5pbmcpCiAgKChuaWwgbmlsIHVuaWNvZGUtYm1wIDpzY3JpcHQ9bGF0aW4pKSkp CihoZWJyZXcKIChuaWwKICAoKG5pbCBuaWwgdW5pY29kZS1ibXAgOm90Zj1oZWJyKSBoZWJyLW90 ZikKICAoKG5pbCBuaWwgdW5pY29kZS1ibXAgOnNjcmlwdD1oZWJyZXcpKSkpCihhcmFiaWMKIChu aWwKICAoKG5pbCBuaWwgdW5pY29kZS1ibXAgOm90Zj1hcmFiPWluaXQsbWVkaSxmaW5hLGxpZ2Er bWFyaykgYXJhYi1vdGYpCiAgKChuaWwgbmlsIHVuaWNvZGUtYm1wIDpvdGY9YXJhYj1pbml0LG1l ZGksZmluYSxsaWdhK35tYXJrKSBhcmFiLW90Zi1uby1ncG9zKQogICgobmlsIG5pbCB1bmljb2Rl LWJtcCA6c2NyaXB0PWFyYWJpYykgYXJhYikpKQooc3lyaWFjCiAobmlsCiAgKChuaWwgbmlsIHVu aWNvZGUtYm1wIDpvdGY9c3lyYykgc3lyYy1vdGYpKSkKKHRoYWFuYQogKG5pbAogICgobmlsIG5p bCB1bmljb2RlLWJtcCA6b3RmPXRoYWEpIHRoYWEtb3RmKQogICgobmlsIG5pbCB1bmljb2RlLWJt cCA6c2NyaXB0PXRoYWFuYSkpKSkKKGRldmFuYWdhcmkKIChuaWwKICAoKG5pbCBuaWwgdW5pY29k ZS1ibXAgOm90Zj1kZXYyKSBkZXYyLW90ZikKICAoKG5pbCBuaWwgdW5pY29kZS1ibXAgOm90Zj1k ZXZhKSBkZXZhLW90ZikpKQooYmVuZ2FsaQogKG5pbAogICgobmlsIG5pbCB1bmljb2RlLWJtcCA6 b3RmPWJuZzIpIGJuZzItb3RmKQogICgobmlsIG5pbCB1bmljb2RlLWJtcCA6b3RmPWJlbmcpIGJl bmctb3RmKSkpCihndXJtdWtoaQogKG5pbAogICgobmlsIG5pbCB1bmljb2RlLWJtcCA6b3RmPWd1 cjIpIGd1cjItb3RmKQogICgobmlsIG5pbCB1bmljb2RlLWJtcCA6b3RmPWd1cnUpIGd1cnUtb3Rm KSkpCihndWphcmF0aQogKG5pbAogICgobmlsIG5pbCB1bmljb2RlLWJtcCA6b3RmPWdqcjIpIGdq cjItb3RmKQogICgobmlsIG5pbCB1bmljb2RlLWJtcCA6b3RmPWd1anIpIGd1anItb3RmKSkpCihv cml5YQogKG5pbAogICgobmlsIG5pbCB1bmljb2RlLWJtcCA6b3RmPW9yeTIpIG9yeTItb3RmKQog ICgobmlsIG5pbCB1bmljb2RlLWJtcCA6b3RmPW9yeWEpIG9yeWEtb3RmKSkpCih0YW1pbAogKG5p bAogICgobmlsIG5pbCB1bmljb2RlLWJtcCA6b3RmPXRtbDIpIHRtbDItb3RmKQogICgobmlsIG5p bCB1bmljb2RlLWJtcCA6b3RmPXRhbWwpIHRhbWwtb3RmKSkpCih0ZWx1Z3UKIChuaWwKICAoKG5p bCBuaWwgdW5pY29kZS1ibXAgOm90Zj10ZWwyKSB0ZWwyLW90ZikKICAoKG5pbCBuaWwgdW5pY29k ZS1ibXAgOm90Zj10ZWx1KSB0ZWx1LW90ZikpKQooa2FubmFkYQogKG5pbAogICgobmlsIG5pbCB1 bmljb2RlLWJtcCA6b3RmPWtuZDIpIGtuZDItb3RmKQogICgobmlsIG5pbCB1bmljb2RlLWJtcCA6 b3RmPWtuZGEpIGtuZGEtb3RmKSkpCihtYWxheWFsYW0KIChuaWwKICAoKG5pbCBuaWwgdW5pY29k ZS1ibXAgOm90Zj1tbG0yKSBtbG0yLW90ZikKICAoKG5pbCBuaWwgdW5pY29kZS1ibXAgOm90Zj1t bHltKSBtbHltLW90ZikpKQooc2luaGFsYQogKG5pbAogICgobmlsIG5pbCB1bmljb2RlLWJtcCA6 b3RmPXNpbmgpIHNpbmgtb3RmKSkpCih0aWJldGFuCiAobmlsCiAgKChuaWwgbmlsIHVuaWNvZGUt Ym1wIDpvdGY9dGlidCkgdGlidC1vdGYpKSkKKHRoYWkKIChuaWwKICAoKG5pbCBuaWwgdW5pY29k ZS1ibXAgOm90Zj10aGFpKSB0aGFpLW90ZikKICAoKG5pbCBuaWwgdW5pY29kZS1ibXAgOnNjcmlw dD10aGFpKSB0aGFpLWdlbmVyaWMpKSkKKGxhbwogKG5pbAogICgobmlsIG5pbCB1bmljb2RlLWJt cCA6b3RmPWxhb28pIGxhb28tb3RmKQogICgobmlsIG5pbCB1bmljb2RlLWJtcCA6c2NyaXB0PWxh bykgbGFvby1nZW5lcmljKSkpCihteWFubWFyCiAobmlsCiAgKChuaWwgcGFkYXVrIHVuaWNvZGUt Ym1wKSBteW1yLXNpbCkpKQooa2htZXIKIChuaWwKICAoKG5pbCBuaWwgdW5pY29kZS1ibXAgOm90 Zj1raG1yKSBraG1yLW90ZikpKQooaGFuCiAoemgKICAoKG5pbCBuaWwgdW5pY29kZS1ibXAgOmxh bmc9emgpKSkKIChqYQogICgobmlsIG5pbCB1bmljb2RlLWJtcCA6bGFuZz1qYSkpKQogKGtvCiAg KChuaWwgbmlsIHVuaWNvZGUtYm1wIDpsYW5nPWtvKSkpKQooaGlyYWdhbmEKIChuaWwKICAoKG5p bCBuaWwgdW5pY29kZS1ibXAgOmxhbmc9amEpKSkpCihrYXRha2FuYQogKG5pbAogICgobmlsIG5p bCB1bmljb2RlLWJtcCA6bGFuZz1qYSkpKSkKKGhhbmd1bAogKG5pbAogICgobmlsIG5pbCB1bmlj b2RlLWJtcCA6bGFuZz1rbykpKSkKKGNoYW0KIChuaWwKICAoKG5pbCBuaWwgdW5pY29kZS1ibXAg OnNjcmlwdD1jaGFtKSBjaGFtLWdlbmVyaWMpKSkKKG5pbAogKChuaWwgbmlsIHVuaWNvZGUtYm1w KSkpCgo7OyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDcsIDIwMTAKOzsgICBOYXRpb25h bCBJbnN0aXR1dGUgb2YgQWR2YW5jZWQgSW5kdXN0cmlhbCBTY2llbmNlIGFuZCBUZWNobm9sb2d5 IChBSVNUKQo7OyAgIFJlZ2lzdHJhdGlvbiBOdW1iZXIgSDE1UFJPMTEyCgo7OyBUaGlzIGZpbGUg aXMgcGFydCBvZiB0aGUgbTE3biBkYXRhYmFzZTsgYSBzdWItcGFydCBvZiB0aGUgbTE3bgo7OyBs aWJyYXJ5LgoKOzsgVGhlIG0xN24gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKOzsgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCjs7IGFzIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKOzsgdGhlIExp Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCgo7OyBUaGUgbTE3 biBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCjs7IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCjs7IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCjs7IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCgo7OyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCjs7IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUg bTE3biBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCjs7IFNvZnR3YXJlIEZvdW5k YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCjs7IEJvc3Rvbiwg TUEgMDIxMTAtMTMwMSwgVVNBLgoKOzsgTG9jYWwgVmFyaWFibGVzOgo7OyBtb2RlOiBsaXNwCjs7 IEVuZDoK --=-=-= Content-Type: application/octet-stream Content-Disposition: attachment; filename=COMBINING.flt Content-Transfer-Encoding: base64 OzsgQ09NQklOSU5HLmZsdCAtLSBGb250IExheW91dCBUYWJsZSBmb3IgY29tYmluaW5nIGRpYWNy aXRpY2FsIG1hcmtzCjs7IENvcHlyaWdodCAoQykgMjAwNyAgQUlTVCAoSDE1UFJPMTEyKQo7OyBT ZWUgdGhlIGVuZCBmb3IgY29weWluZyBjb25kaXRpb25zLgoKKGZvbnQgbGF5b3V0ZXIgY29tYmlu aW5nIG5pbCkKCjs7OyA8bGk+IENPTUJJTklORy5mbHQKOzs7Cjs7OyBGb3IgY29tYmluaW5nIGRp YWNyaXRpY2FsIG1hcnNrIChVKzAzMDAuLlUrMDM2RikuCgooY2F0ZWdvcnkKIDs7IFRoZSBjb250 ZW50cyBpcyBidWlsZCB1cCBieSB0aGUgbTE3bi1saWIuCiApCgooZ2VuZXJhdG9yCiAoMAogIChj b25kCiAgICgiKHUpKFthLXRdKykiCiAgICAoY29uZAogICAgICgoZm9udC1mYWNpbGl0eSA6b3Rm PURGTFQ9bGlnYSkgPCA6b3RmPURGTFQ9bGlnYSA+KQogICAgICgoZm9udC1mYWNpbGl0eSA6b3Rm PURGTFQrbWFyaykgPCA6b3RmPURGTFQrbWFyayxta21rID4pCiAgICAgKCIuKiIKICAgICAgPAk9 CQkJCTsgY29tYmluaW5nIGNsYXNzCiAgICAgIChjb25kICgiYSIgQmMuQmMgPSkJCTsgPCAyMDAK CSAgICAoImIiIGJsLnRjID0pCQk7IDIwMAoJICAgICgiYyIgYmMudGMgPSkJCTsgMjAyCgkgICAg KCJkIiBici50YyA9KQkJOyAyMDQKCSAgICAoImUiIEJsLkJyID0pCQk7IDIwOAoJICAgICgiZiIg QnIuQmwgPSkJCTsgMjEwCgkgICAgKCJnIiB0bC5iYyA9KQkJOyAyMTIKCSAgICAoImgiIHRjLmJj ID0pCQk7IDIxNAoJICAgICgiaSIgdHIuYmMgPSkJCTsgMjE2CgkgICAgKCJqIiBibC50YyA9KQkJ OyAyMTgKCSAgICAoImsiIGJjLXRjID0pCQk7IDIyMAoJICAgICgibCIgYnItdGMgPSkJCTsgMjIy CgkgICAgKCJtIiBCbC5CciA9KQkJOyAyMjQKCSAgICAoIm4iIEJyLkJsID0pCQk7IDIyNgoJICAg ICgibyIgdGwrYmMgPSkJCTsgMjI4CgkgICAgKCJwIiB0YytiYyA9KQkJOyAyMzAKCSAgICAoInEi IHRyK2JjID0pCQk7IDIzMgoJICAgICgiciIgYnItdHIgPSkJCTsgMjMzCgkgICAgKCJzIiB0citi ciA9KQkJOyAyMzQKCSAgICAoInQiIGJjLXRjID0pKQkJOyAyNDAKICAgICAgKiA+KSkpCiAgICgi W2EtdF0iIFsgPSBdKQogICAoIi4iID0pKQogICopKQoKOzsgQ29weXJpZ2h0IChDKSAyMDA3Cjs7 ICAgTmF0aW9uYWwgSW5zdGl0dXRlIG9mIEFkdmFuY2VkIEluZHVzdHJpYWwgU2NpZW5jZSBhbmQg VGVjaG5vbG9neSAoQUlTVCkKOzsgICBSZWdpc3RyYXRpb24gTnVtYmVyIEgxNVBSTzExMgoKOzsg VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIG0xN24gZGF0YWJhc2U7IGEgc3ViLXBhcnQgb2YgdGhl IG0xN24KOzsgbGlicmFyeS4KCjs7IFRoZSBtMTduIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCjs7IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQo7OyBhcyBwdWJsaXNo ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9m Cjs7IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoK OzsgVGhlIG0xN24gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAo7OyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgo7OyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQo7OyBMZXNzZXIgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgoKOzsgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo7OyBMaWNlbnNlIGFsb25n IHdpdGggdGhlIG0xN24gbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQo7OyBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAo7 OyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KCjs7IExvY2FsIFZhcmlhYmxlczoKOzsgbW9k ZTogZW1hY3MtbGlzcAo7OyBFbmQ6Cg== --=-=-=--