mirror of https://github.com/Aloxaf/silicon
feat: introduce harfbuzz feature (#209)
This commit is contained in:
parent
7039029222
commit
447c456385
|
@ -60,6 +60,34 @@ jobs:
|
|||
test-windows:
|
||||
name: x86_64-pc-windows-msvc
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v1
|
||||
with:
|
||||
fetch-depth: 1
|
||||
|
||||
- name: Install rust
|
||||
uses: actions-rs/toolchain@v1
|
||||
with:
|
||||
profile: minimal
|
||||
toolchain: nightly
|
||||
override: true
|
||||
|
||||
- name: Cargo check
|
||||
uses: actions-rs/cargo@v1
|
||||
with:
|
||||
command: check
|
||||
args: --no-default-features --features=bin
|
||||
|
||||
- name: Cargo test
|
||||
uses: actions-rs/cargo@v1
|
||||
with:
|
||||
command: test
|
||||
args: --no-default-features --features=bin -- --nocapture
|
||||
|
||||
test-macos:
|
||||
name: x86_64-apple-darwin
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v1
|
||||
|
|
|
@ -95,7 +95,7 @@ jobs:
|
|||
- uses: actions-rs/cargo@v1
|
||||
with:
|
||||
command: build
|
||||
args: --release
|
||||
args: --release --no-default-features --features=bin
|
||||
- id: get_name
|
||||
shell: bash
|
||||
run: |
|
||||
|
|
14
Cargo.toml
14
Cargo.toml
|
@ -10,10 +10,11 @@ license = "MIT"
|
|||
edition = "2018"
|
||||
|
||||
[features]
|
||||
# fearures required for silicon as a application
|
||||
# bin fearure is required for silicon as a application
|
||||
# disable it when using as a library
|
||||
default = ["bin"]
|
||||
default = ["bin", "harfbuzz"]
|
||||
bin = ["structopt", "env_logger", "anyhow", "shell-words"]
|
||||
harfbuzz = ["harfbuzz-sys", "font-kit/loader-freetype-default", "font-kit/source-fontconfig-default"]
|
||||
|
||||
[dependencies]
|
||||
dirs = "4.0"
|
||||
|
@ -26,6 +27,8 @@ log = "0.4.11"
|
|||
lazy_static = "1.4.0"
|
||||
shell-words = { version = "1.0.0", optional = true }
|
||||
rayon = "1.5.1"
|
||||
font-kit = "0.11"
|
||||
harfbuzz-sys = { version = "0.5.0", optional = true }
|
||||
|
||||
[dependencies.image]
|
||||
version = "0.24"
|
||||
|
@ -53,13 +56,6 @@ default-features = false
|
|||
features = ["termcolor", "atty", "humantime"]
|
||||
optional = true
|
||||
|
||||
[dependencies.font-kit]
|
||||
version= "0.11"
|
||||
features= ["loader-freetype-default"]
|
||||
|
||||
[target.'cfg(not(target_os = "windows"))'.dependencies]
|
||||
harfbuzz-sys = "0.5.0"
|
||||
|
||||
[target.'cfg(target_os = "macos")'.dependencies]
|
||||
pasteboard = "0.1.3"
|
||||
|
||||
|
|
|
@ -36,6 +36,8 @@ It's not as beautiful as Carbon...
|
|||
cargo install silicon
|
||||
```
|
||||
|
||||
NOTE: harfbuzz feature is enabled by default. If you are using Windows, I suggest you disable it to get it build easier.
|
||||
|
||||
### AUR
|
||||
|
||||
Silicon is available in the official repository:
|
||||
|
|
13
src/font.rs
13
src/font.rs
|
@ -12,7 +12,7 @@
|
|||
//! font.draw_text_mut(&mut image, Rgb([255, 0, 0]), 0, 0, FontStyle::REGULAR, "Hello, world");
|
||||
//! ```
|
||||
use crate::error::FontError;
|
||||
#[cfg(not(target_os = "windows"))]
|
||||
#[cfg(feature = "harfbuzz")]
|
||||
use crate::hb_wrapper::{feature_from_tag, HBBuffer, HBFont};
|
||||
use anyhow::Result;
|
||||
use conv::ValueInto;
|
||||
|
@ -24,7 +24,6 @@ use font_kit::source::SystemSource;
|
|||
use image::{GenericImage, Pixel};
|
||||
use imageproc::definitions::Clamp;
|
||||
use imageproc::pixelops::weighted_sum;
|
||||
use log::trace;
|
||||
use pathfinder_geometry::transform2d::Transform2F;
|
||||
use std::collections::HashMap;
|
||||
use std::sync::Arc;
|
||||
|
@ -215,7 +214,7 @@ impl FontCollection {
|
|||
.unwrap()
|
||||
}
|
||||
|
||||
#[cfg(not(target_os = "windows"))]
|
||||
#[cfg(feature = "harfbuzz")]
|
||||
fn shape_text(&self, font: &mut HBFont, text: &str) -> Result<Vec<u32>> {
|
||||
// feature tags
|
||||
let features = vec![
|
||||
|
@ -235,7 +234,7 @@ impl FontCollection {
|
|||
Ok(glyph_ids)
|
||||
}
|
||||
|
||||
#[cfg(not(target_os = "windows"))]
|
||||
#[cfg(feature = "harfbuzz")]
|
||||
fn split_by_font(&self, text: &str, style: FontStyle) -> Vec<(&ImageFont, &Font, String)> {
|
||||
let mut result: Vec<(&ImageFont, &Font, String)> = vec![];
|
||||
for c in text.chars() {
|
||||
|
@ -248,11 +247,11 @@ impl FontCollection {
|
|||
}
|
||||
}
|
||||
}
|
||||
trace!("{:#?}", &result);
|
||||
log::trace!("{:#?}", &result);
|
||||
result
|
||||
}
|
||||
|
||||
#[cfg(not(target_os = "windows"))]
|
||||
#[cfg(feature = "harfbuzz")]
|
||||
fn layout(&self, text: &str, style: FontStyle) -> (Vec<PositionedGlyph>, u32) {
|
||||
let mut delta_x = 0;
|
||||
let height = self.get_font_height();
|
||||
|
@ -288,7 +287,7 @@ impl FontCollection {
|
|||
(glyphs, delta_x)
|
||||
}
|
||||
|
||||
#[cfg(target_os = "windows")]
|
||||
#[cfg(not(feature = "harfbuzz"))]
|
||||
fn layout(&self, text: &str, style: FontStyle) -> (Vec<PositionedGlyph>, u32) {
|
||||
let mut delta_x = 0;
|
||||
let height = self.get_font_height();
|
||||
|
|
|
@ -43,6 +43,6 @@ pub mod directories;
|
|||
pub mod error;
|
||||
pub mod font;
|
||||
pub mod formatter;
|
||||
#[cfg(not(target_os = "windows"))]
|
||||
#[cfg(feature = "harfbuzz")]
|
||||
pub mod hb_wrapper;
|
||||
pub mod utils;
|
||||
|
|
Loading…
Reference in New Issue