-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Full "complex text" support: indic scripts, ligatures, kerning, etc. #7774
Comments
Thank you for this great en-devour. Bravo. ..This is long waited news... Could you please mention, when would it be ready for public to use? when is the publish date? Can you post some screenshots of final rendering in Arabic lang? I am more interested in Persian Language which is similar to Arabic. RTL and almost similar alphabets. |
@Kashian happy to oblige with a screenshot from Iran: Planned availability of Arabic/Bidirectional support:
The changes are not yet available in the Mapbox GL Qt Submodule (#7777). If you’re interested in trying out this functionality ahead of time on a mobile or desktop platform, check out our instructions for building the SDKs yourself: https://github.com/mapbox/mapbox-gl-native/tree/master/platform/android#contributing-to-the-sdk For trying out the functionality in gl-js, see mapbox/mapbox-gl-js#3758 (comment) |
Note that either Harfbuzz and Core Text would get us support for Unicode supplementary planes (mapbox/mapbox-gl-js#4001) almost for free. (Support for full-color emoji would likely require significant work beyond the scope of this ticket.) |
HarfBuzz do support advanced typography through its support for OpenType. Apple Advanced Typography (AAT) is an alternative technology to OpenType that is only supported by Apple, and thus not widely used outside of Apple own fonts. HarfBuzz actually can support AAT on Apple platforms by using Core Text API, so using HarfBuzz should give you OpenType support on all platforms and additionally AAT support on Apple ones. |
@khaledhosny You know way more than I do about HarfBuzz and text shaping, so please forgive my imprecise description of "advanced typography". I haven't yet worked on the problem enough to know how to describe it properly! I'm using "advanced typography" as kind of a placeholder term for "nice to have" functionality like support for AAT. Some things HarfBuzz supports out of the box still might not get picked up in our initial implementation since we're going to try to work with a subset of font tables (I'm thinking of the MATH table as an example: something relatively straightforward to support with HarfBuzz but still something that we might not support in a first pass). |
I just wanted to make sure things are clear :) The biggest OpenType tables (after |
@ChrisLoer and I paired on the coretext-hack branch to perform complex text shaping using system fonts on iOS and macOS: Compare the before and after with the system-rendered text in the popover. |
HarfBuzz should do that as well, you don't need separate CoreText backend. |
Yes, we’re also exploring HarfBuzz + FreeType versus TinySDF + Core Text: #7862 (comment) #7528. |
As @behdad mentioned in #7774 (comment), we are also using harfbuzz coretext context here. |
@1ec5 I tried to implement this on my app. I cloned coretext hack branch. Now I have a tile server running. Now how to tell to use system font? I have style.json file. what should be the font name written in style.json? |
@nafis042 Although I'm excited you're playing around with it, unfortunately we can't really support the "coretext hack" branch -- it was a proof-of-concept, but there are many things on that branch that are simply broken. It would not be appropriate for any production app. For what it's worth, the demo is meant to work with the |
any timeline for indic language support? |
Unfortunately, no. It's still on our backlog, but no specific plans. If you have a cool project that's blocked by the lack of Indic language support, it'd be great to hear a quick description. Although it's clearly functionality we want to support, we don't have a library of concrete examples of what kinds of maps/apps this would unlock. |
@hakimelek Is that screenshot taken from Mapbox GL JS? If so you need to enable the RTL text plugin, example is here: https://www.mapbox.com/mapbox-gl-js/example/mapbox-gl-rtl-text/ |
@ChrisLoer Thanks! I will give a shot. I am using |
This comment has been minimized.
This comment has been minimized.
This issue has been automatically detected as stale because it has not had recent activity and will be archived. Thank you for your contributions. |
@1ec5 Hopefully some good news is coming from mapbox regarding complex indic language visualization |
Hi Guys, appriciate your tips |
GL Native now uses the ICU library to support right-to-left (and bidirectional) text, along with text shaping for languages that use the Arabic script.
There are a number of further features that fall under the category of "complex text" that remain to be addressed:
Harfbuzz for basic shaping
The first two items can be implemented using Harfbuzz. However, a number of changes to our font rendering architecture will be necessary:
Harfbuzz support is tracked as #7528
Advanced typography
Supporting some advanced typography features will require passing through to system libraries (such as Apple's Core Text) or linking in libraries like Graphite. Using advanced typography features would open up some interesting (and possibly unique) options for creating beautiful maps, for instance by using calligraphic typefaces such as a Nastaliq script or Zapfino. Harfbuzz has support for passing shaping calls through to Core Text, so enabling some of these features on iOS might not be too difficult, but any support we added would likely remain highly platform-dependent.
Many advanced typographical features require explicit typographical instructions in addition to the basic Unicode input. Supporting these features would require changes to the style spec and Mapbox Studio to enable designers to take advantage of them. They are beyond the scope of the changes we are currently planning.
Line breaking
Line-breaking can be implemented using ICU, but a standard implementation would require client-side line breaking dictionaries which are likely to be prohibitively large. The proposed implementation is tracked as #7362.
Mapbox Classic parity
Mapbox Classic supports basic shaping using Harfbuzz via Mapnik, but I don't believe it has support for language-aware line breaking or advanced typographical features.
Resources
mapbox/mapbox-gl-js#4009 is a paired ticket that tracks making these changes in GL-JS.
@1ec5 @lucaswoj @pveugen
The text was updated successfully, but these errors were encountered: