macOS: Support all OpenType
font features (#11611)
This PR brings support for all `OpenType` font features to `macOS(v10.10+)`. Now, both `Windows`(with #10756 ) and `macOS` support all font features. Due to my limited familiarity with the APIs on macOS, I believe I have made sure to call `CFRelease` on all variables where it should be called. Close #11486 , and I think the official website's [documentation](https://zed.dev/docs/configuring-zed) can be updated after merging this PR. > Zed supports a subset of OpenType features that can be enabled or disabled for a given buffer or terminal font. The following OpenType features can be enabled or disabled too: calt, case, cpsp, frac, liga, onum, ordn, pnum, ss01, ss02, ss03, ss04, ss05, ss06, ss07, ss08, ss09, ss10, ss11, ss12, ss13, ss14, ss15, ss16, ss17, ss18, ss19, ss20, subs, sups, swsh, titl, tnum, zero. https://github.com/zed-industries/zed/assets/14981363/44e503f9-1496-4746-bc7d-20878c6f8a93 Release Notes: - Added support for **all** `OpenType` font features to macOS.
This commit is contained in:
parent
f47bd32f15
commit
f7c5d70740
2 changed files with 60 additions and 394 deletions
|
@ -1,6 +1,4 @@
|
|||
#[cfg(target_os = "windows")]
|
||||
use crate::SharedString;
|
||||
#[cfg(target_os = "windows")]
|
||||
use itertools::Itertools;
|
||||
use schemars::{
|
||||
schema::{InstanceType, Schema, SchemaObject, SingleOrVec},
|
||||
|
@ -15,9 +13,7 @@ macro_rules! create_definitions {
|
|||
pub struct FontFeatures {
|
||||
enabled: u64,
|
||||
disabled: u64,
|
||||
#[cfg(target_os = "windows")]
|
||||
other_enabled: SharedString,
|
||||
#[cfg(target_os = "windows")]
|
||||
other_disabled: SharedString,
|
||||
}
|
||||
|
||||
|
@ -37,7 +33,6 @@ macro_rules! create_definitions {
|
|||
|
||||
/// Get the tag name list of the font OpenType features
|
||||
/// only enabled or disabled features are returned
|
||||
#[cfg(target_os = "windows")]
|
||||
pub fn tag_value_list(&self) -> Vec<(String, bool)> {
|
||||
let mut result = Vec::new();
|
||||
$(
|
||||
|
@ -105,29 +100,6 @@ macro_rules! create_definitions {
|
|||
formatter.write_str("a map of font features")
|
||||
}
|
||||
|
||||
#[cfg(not(target_os = "windows"))]
|
||||
fn visit_map<M>(self, mut access: M) -> Result<Self::Value, M::Error>
|
||||
where
|
||||
M: MapAccess<'de>,
|
||||
{
|
||||
let mut enabled: u64 = 0;
|
||||
let mut disabled: u64 = 0;
|
||||
|
||||
while let Some((key, value)) = access.next_entry::<String, Option<bool>>()? {
|
||||
let idx = match key.as_str() {
|
||||
$(stringify!($name) => $idx,)*
|
||||
_ => continue,
|
||||
};
|
||||
match value {
|
||||
Some(true) => enabled |= 1 << idx,
|
||||
Some(false) => disabled |= 1 << idx,
|
||||
None => {}
|
||||
};
|
||||
}
|
||||
Ok(FontFeatures { enabled, disabled })
|
||||
}
|
||||
|
||||
#[cfg(target_os = "windows")]
|
||||
fn visit_map<M>(self, mut access: M) -> Result<Self::Value, M::Error>
|
||||
where
|
||||
M: MapAccess<'de>,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue