Skip to content

Commit 455e23f

Browse files
committed
Fix the reading of incorrect font files
1 parent d0de9e4 commit 455e23f

File tree

6 files changed

+172
-45
lines changed

6 files changed

+172
-45
lines changed

index.mjs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import addon from './native/index.node';
22

33
let dirs = [
4+
`${process.env.HOME}/.local/share/bad_fonts`,
45
`${process.env.HOME}/.local/share/fonts`,
56
'/usr/share/fonts'
67
];

native/Cargo.lock

Lines changed: 99 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

native/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,4 @@ neon-build = "0.3.3"
2424

2525
[dependencies]
2626
neon = "0.3.3"
27-
libfonthelper = "0.1.4"
27+
libfonthelper = "0.2.4"

native/src/async_font.rs

Lines changed: 51 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,73 @@
11
extern crate libfonthelper;
22

3-
use libfonthelper::{get_fonts, types::FontMap};
3+
use libfonthelper::{font::Font, Fonts};
44
use neon::{prelude::*, task::Task};
55

66
struct Worker {
77
dirs: Vec<String>,
88
}
99

1010
impl Task for Worker {
11-
type Output = FontMap;
11+
type Output = Vec<Font>;
1212
type Error = String;
1313
type JsEvent = JsObject;
1414

15-
fn perform(&self) -> Result<FontMap, String> {
16-
match get_fonts(&self.dirs) {
15+
fn perform(&self) -> Result<Vec<Font>, String> {
16+
match Fonts::new(&self.dirs) {
1717
Err(err) => return Err(String::from(err.to_string())),
18-
Ok(fonts) => return Ok(fonts),
18+
Ok(fonts) => {
19+
let mut map: Vec<Font> = Vec::new();
20+
for font in fonts {
21+
map.push(font);
22+
}
23+
24+
return Ok(map);
25+
}
1926
};
2027
}
2128

22-
fn complete(self, mut cx: TaskContext, result: Result<FontMap, String>) -> JsResult<JsObject> {
29+
fn complete(
30+
self,
31+
mut cx: TaskContext,
32+
result: Result<Vec<Font>, String>,
33+
) -> JsResult<JsObject> {
2334
let js_fonts = JsObject::new(&mut cx);
2435

25-
for (path, font) in result.unwrap() {
26-
let js_font_entries = JsArray::new(&mut cx, font.len() as u32);
27-
28-
for (index, entry) in font.iter().enumerate() {
29-
let js_font_entry = JsObject::new(&mut cx);
30-
31-
let id = cx.string(&entry.id);
32-
let postscript = cx.string(&entry.postscript);
33-
let family = cx.string(&entry.family);
34-
let style = cx.string(&entry.style);
35-
let weight = cx.number(i32::from(entry.weight));
36-
let stretch = cx.number(i32::from(entry.stretch));
37-
let italic = cx.boolean(entry.italic);
38-
39-
js_font_entry.set(&mut cx, "id", id)?;
40-
js_font_entry.set(&mut cx, "postscript", postscript)?;
41-
js_font_entry.set(&mut cx, "family", family)?;
42-
js_font_entry.set(&mut cx, "style", style)?;
43-
js_font_entry.set(&mut cx, "weight", weight)?;
44-
js_font_entry.set(&mut cx, "stretch", stretch)?;
45-
js_font_entry.set(&mut cx, "italic", italic)?;
46-
47-
js_font_entries.set(&mut cx, index.to_string().as_str(), js_font_entry)?;
36+
match result {
37+
Err(err) => println!("Cannot get fonts, error: {}", err),
38+
Ok(fonts) => {
39+
for font in fonts {
40+
if (font.path.eq("")) {
41+
continue;
42+
}
43+
44+
let js_font_entries = JsArray::new(&mut cx, font.entries.len() as u32);
45+
46+
for (index, entry) in font.entries.iter().enumerate() {
47+
let js_font_entry = JsObject::new(&mut cx);
48+
49+
let id = cx.string(&entry.id);
50+
let postscript = cx.string(&entry.postscript);
51+
let family = cx.string(&entry.family);
52+
let style = cx.string(&entry.style);
53+
let weight = cx.number(i32::from(entry.weight));
54+
let stretch = cx.number(i32::from(entry.stretch));
55+
let italic = cx.boolean(entry.italic);
56+
57+
js_font_entry.set(&mut cx, "id", id)?;
58+
js_font_entry.set(&mut cx, "postscript", postscript)?;
59+
js_font_entry.set(&mut cx, "family", family)?;
60+
js_font_entry.set(&mut cx, "style", style)?;
61+
js_font_entry.set(&mut cx, "weight", weight)?;
62+
js_font_entry.set(&mut cx, "stretch", stretch)?;
63+
js_font_entry.set(&mut cx, "italic", italic)?;
64+
65+
js_font_entries.set(&mut cx, index.to_string().as_str(), js_font_entry)?;
66+
}
67+
68+
js_fonts.set(&mut cx, font.path.as_str(), js_font_entries)?;
69+
}
4870
}
49-
50-
js_fonts.set(&mut cx, path.as_str(), js_font_entries)?;
5171
}
5272

5373
Ok(js_fonts)

package-lock.json

Lines changed: 12 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "figma-linux-rust-binding",
3-
"version": "0.1.1",
3+
"version": "0.1.4",
44
"description": "Rust module that makes object of meta data of fonts",
55
"main": "native/index.node",
66
"author": "ChugunovRoman <Zebs-BMK@yandex.ru>",
@@ -25,12 +25,16 @@
2525
"dependencies": {
2626
"neon-cli": "^0.3.3"
2727
},
28+
"devDependencies": {
29+
"electron-build-env": "^0.2",
30+
"neon-cli": "^0.3.3"
31+
},
2832
"types": "index.d.ts",
2933
"deprecated": false,
3034
"scripts": {
31-
"install": "neon build --release",
35+
"install": "electron-build-env neon build --release",
3236
"start": "node --experimental-modules ./index.mjs",
33-
"build": "neon build",
34-
"release": "neon build --release"
37+
"build": "electron-build-env neon build",
38+
"release": "electron-build-env neon build --release"
3539
}
3640
}

0 commit comments

Comments
 (0)