From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.ciao.gmane.io!not-for-mail From: Trevor Spiteri Newsgroups: gmane.emacs.devel Subject: Re: Ligatures (was: Unify the Platforms: Cairo+FreeType+Harfbuzz Everywhere (except TTY)) Date: Tue, 19 May 2020 12:09:32 +0200 Message-ID: <59b018c9-9748-b84b-5768-a0a7a1b87871@ieee.org> References: <20200517124125.000013a4@web.de> <97C7EAB7-10AB-4702-ABC8-EB6C1C50ABDB@gnu.org> <20200517165953.000044d2@web.de> <83lflqblp0.fsf@gnu.org> <83ftbybio3.fsf@gnu.org> <83zha69xs2.fsf@gnu.org> <83367x9qeq.fsf@gnu.org> <0ccae2a4-533b-d15c-2884-c2f00b067776@gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------E307C83FF923DD9F54A56F2E" Injection-Info: ciao.gmane.io; posting-host="ciao.gmane.io:159.69.161.202"; logging-data="106345"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Tue May 19 12:10:11 2020 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jazCM-000RXh-RS for ged-emacs-devel@m.gmane-mx.org; Tue, 19 May 2020 12:10:10 +0200 Original-Received: from localhost ([::1]:34802 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jazCL-00009P-UV for ged-emacs-devel@m.gmane-mx.org; Tue, 19 May 2020 06:10:09 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:36490) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jazBs-0008CE-1Y for emacs-devel@gnu.org; Tue, 19 May 2020 06:09:40 -0400 Original-Received: from mail-wr1-x432.google.com ([2a00:1450:4864:20::432]:33034) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jazBq-0006Ij-T0 for emacs-devel@gnu.org; Tue, 19 May 2020 06:09:39 -0400 Original-Received: by mail-wr1-x432.google.com with SMTP id l11so15283431wru.0 for ; Tue, 19 May 2020 03:09:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ieee.org; s=google; h=subject:to:references:from:autocrypt:message-id:date:user-agent :mime-version:in-reply-to:content-language; bh=RapMCNDK13pMYERFYVtaLjXkwb6lQaMzBVd9GYjse0A=; b=PIi2OAwkXlVwtRl4dS76ngVrc0iTZHbbw1pslizZmbPe1L05H0/LXeV5LG5KePghur FqOj6cugOpYdaritXIhq9WHplkUjq+rKNkprCBqDI5zmb2MxyKc+MS8Si5lVflM2tolw K1c7K2++KDj3WvueV9JKwCAZ8mlgP6sSj43oQ= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:autocrypt:message-id :date:user-agent:mime-version:in-reply-to:content-language; bh=RapMCNDK13pMYERFYVtaLjXkwb6lQaMzBVd9GYjse0A=; b=eNvYjZES00IeTw03PLjPdnFOOaHSZX15SlNHMoPTbJqZFobeWHGqtRQf/WAxjqSZVF R3pmxvHGrSH+8znW2rU7PIcDaVP8SSII07/bhiauS1I4u9bbOZ5yLrzA18MAbcrZhiIM b+yUpoltXC9qIFU2wkzKXK7Ux5f52Tn8BRwgww7970Wx9nOuCGeidnQVMxuoqYe9DazO /xTeO5HrnhukExiXdJLf0fdtuqxm8CVw4E9HazNUYuesY8gxQKlPpwxbtSmdkidZTOQB tH4t3lZd4w2h4bSxoLrLXmt9AKmwi1rj6eGcDJqFTslGv+VcHsUSy9Aa2uD4OEcQIKp+ ZM0A== X-Gm-Message-State: AOAM531QvjDTqjM7MFQY5gAlfm02vdPqSjkSQs1Oi+i9vhLa7QINF5TP ldw8T9ovGKr0PjMEvjJ2FJ2JXFcTRS8= X-Google-Smtp-Source: ABdhPJyMAShIDh6NjWlX9DImscQVCcGZQFbe/8rPdN5JRG98PT7Sy3iiPxKlIrTkYh/PzXv6Gffsww== X-Received: by 2002:a5d:56c6:: with SMTP id m6mr24442265wrw.78.1589882974306; Tue, 19 May 2020 03:09:34 -0700 (PDT) Original-Received: from [192.168.1.128] ([46.11.102.162]) by smtp.gmail.com with ESMTPSA id s11sm19883583wrp.79.2020.05.19.03.09.33 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 19 May 2020 03:09:33 -0700 (PDT) Autocrypt: addr=tspiteri@ieee.org; prefer-encrypt=mutual; keydata= mQINBFcxvj8BEADgjJ0VPjUDQHNOO8+zw4txojpVRUbw3q4o3EaxHBSn3Nzl8qtp+OOzDe6n M4YQK6/ocBSJc+w3rFQzjmHxcCaJW8XJTaV27ot9r/wS6ucz34xFM6PJp2iIVT5SI5h1htIv ywJ9JlC+BiVN8X3QAvBJeQEGx48HNv+oYR/6mLvh/3cuyABBcmmsMBmG6ACpLJ6COhOXkl4r XB+gmVvt72HWy+zYyF/m1aMxQFakrAVWP3uslReCPR66bKiS9Hm77IyGGE5LOhccda0nFy5I kHqibst646jTQAu1EcpQZrnRXq7JOEOToM3Aj8GRI+T9+rKr1rf2RA7zdm0D9reUV+iPOEaI jFa4XT43BddM8mlV5pSQft2qoB3cTNHo1uJz8cQWTlmwcJiUEPVi5+5EtuDz/ovxSRIepNl4 zEHO5NNIqt2AZNLr+49UwWSmNi5NVfDxjXswCmFfUBFev14nxVz7jaPWUtD+htzkIUAoidlM a7tkeboP6j1UonX/ELwRTnWctpich8GCVaV+AaTViNpiJFw/wR3jN3rjE2AN5dgSgLEroInS M+U3a21c0pGarETx/JlpteZjWxvMMtdDr0MeLqVvSMxErvBB+0JhqkK9uAoAj8hCe6mweDao qIyUwPewbDD9Gcgxzd2ljbPcw1kOP8hFEjn+WWOcYY+rVu6+jQARAQABtCJUcmV2b3IgU3Bp dGVyaSA8dHNwaXRlcmlAaWVlZS5vcmc+iQJXBBMBCABBAhsjBQsJCAcCBhUICQoLAgQWAgMB Ah4BAheAAhkBFiEEG4 In-Reply-To: <0ccae2a4-533b-d15c-2884-c2f00b067776@gmail.com> Content-Language: en-US Received-SPF: pass client-ip=2a00:1450:4864:20::432; envelope-from=tspiteri@ieee.org; helo=mail-wr1-x432.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 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-mx.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.io gmane.emacs.devel:250895 Archived-At: This is a multi-part message in MIME format. --------------E307C83FF923DD9F54A56F2E Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit On 18/05/2020 19:31, Clément Pit-Claudel wrote: > On 18/05/2020 12.08, Eli Zaretskii wrote: >> On second thought, I think I misunderstood you. If the font that is >> used shows "ffi" as a _single_ glyph ffi, and LibreOffice indeed >> highlights parts of this glyph, then I'd like to know how it does >> that, and how far does this capability extend. I mean, what does it >> do with ligatures like ae, displayed as æ -- does it highlight the >> common vertical stroke for both parts? And what about "st", displayed >> as st -- this has a curved "hand" connecting s and t -- to which of the >> 2 does it belong for the purposes of highlighting? There's also "hv" >> displayed as ƕ, let alone "fs" displayed as ẞ and "fz" displayed as >> ß. > I've attached a screenshot with a few examples, though I couldn't find a font that displays ae as æ. > > Firefox does the same as LibreOffice (try it here, for example: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant-ligatures). Since Firefox uses Harbuzz, I think there's a good chance we can support that feature too :) For what it's worth, LibreOffice does it differently. I think what it does is place the cursor on the position it would be if any following text was missing. So moving after the second f in ffi would move the cursor to the same position as after ff if the i was missing. This is evident from fraction ligatures; in the screenshot I'm attaching, "63" is selected and the selection matches the 63 in the bottom line. --------------E307C83FF923DD9F54A56F2E Content-Type: image/png; name="fraction.png" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="fraction.png" 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 --------------E307C83FF923DD9F54A56F2E--