typst 0.13.5 → 0.14.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2e4b47eadd66459fc03839fddfb0d95a2757a63c5ed6475bf0000ac6a8edf72b
4
- data.tar.gz: 2bfe1a0c9e7d542d6f64d59de0c777a86a3c56f11962c997f6a0e378e5a348d2
3
+ metadata.gz: 77a2b80d3ddc7e3b8a2fd44c365b3a7c9464383894bb3a61e869d87085baa8a2
4
+ data.tar.gz: ce2e709afe2b9b76f73292ec13df74815ac0ff7dc7fc4636a58d73b7122ad391
5
5
  SHA512:
6
- metadata.gz: e5626d390a3e6f3d844b0e91e3df609d9a167d2b1b496634b50133110b57ed7a2756db3c6ee23de327849d22ddc5d45a9088af576a26512d49afef31e0b0aae6
7
- data.tar.gz: ff150b69ed67845d4a4a48f1b1bda2421905dc7a035270f1ae6a5ec8ad2911523499bb23256b1e2aa10f0c5ab51f74f27201e33b2f6827c3db4f4adb1e630870
6
+ metadata.gz: b0e845ea82c232ed88b4dd6c159b814aad54199ff85829a7edb18a42346abf887e138345efca9e1ab1a2ca8b379b161bda3448162cd128f811b342815a7f0b85
7
+ data.tar.gz: 73c99e328ea7aa5ba58d574b7b7770b86355f97787e2df6de4a4578913ae7d72082e11309309ae2ccd2f3882ceba26a482e60de8b25dc188a78e678ca41c99b7
data/Rakefile CHANGED
@@ -1,12 +1,10 @@
1
1
  require "bundler/gem_tasks"
2
- require "rake/extensiontask"
2
+ require "rb_sys/extensiontask"
3
3
  require "rake/testtask"
4
- require 'rake_compiler_dock'
5
- require "rubygems/package_task"
6
- require "bundler"
7
4
 
8
5
  CROSS_PLATFORMS = %w[
9
6
  aarch64-linux
7
+ aarch64-linux-musl
10
8
  arm64-darwin
11
9
  x64-mingw-ucrt
12
10
  x86_64-darwin
@@ -18,9 +16,7 @@ spec = Bundler.load_gemspec("typst.gemspec")
18
16
 
19
17
  Gem::PackageTask.new(spec).define
20
18
 
21
- RakeCompilerDock.set_ruby_cc_version("~> 3.0")
22
-
23
- Rake::ExtensionTask.new("typst", spec) do |ext|
19
+ RbSys::ExtensionTask.new("typst", spec) do |ext|
24
20
  ext.lib_dir = "lib/typst"
25
21
  ext.source_pattern = "*.{rs,toml}"
26
22
  ext.cross_compile = true
@@ -40,8 +36,8 @@ task 'gem:native' do |t|
40
36
  end
41
37
 
42
38
  task 'gem:native:push' do |t|
39
+ sh "gem signin"
43
40
  CROSS_PLATFORMS.each do |platform|
44
- sh "gem signin"
45
41
  sh "gem push pkg/typst-#{spec.version}-#{platform}.gem"
46
42
  end
47
43
  end
data/ext/typst/Cargo.toml CHANGED
@@ -1,18 +1,18 @@
1
1
  [package]
2
2
  name = "typst"
3
- version = "0.13.5"
3
+ version = "0.14.2"
4
4
  edition = "2021"
5
5
 
6
6
  [lib]
7
7
  crate-type = ["cdylib"]
8
8
 
9
9
  [dependencies]
10
- chrono = { version = "0.4.38", default-features = false, features = [
10
+ chrono = { version = "0.4.42", default-features = false, features = [
11
11
  "clock",
12
12
  "std",
13
13
  ] }
14
- codespan-reporting = "0.11"
15
- comemo = "0.4"
14
+ codespan-reporting = "0.13"
15
+ comemo = "0.5.0"
16
16
  dirs = "5" #
17
17
  ecow = "0.2"
18
18
  env_logger = "0.10.1" #
@@ -21,28 +21,26 @@ filetime = "0.2.22" #
21
21
  flate2 = "1" #
22
22
  fontdb = "0.15.0" #
23
23
  log = "0.4.20" #
24
- magnus = { version = "0.7.1" }
24
+ magnus = { version = "0.8.2" }
25
25
  pathdiff = "0.2"
26
26
  same-file = "1" #
27
27
  siphasher = "1.0" #
28
28
  tar = "0.4" #
29
- #typst = { git = "https://github.com/typst/typst.git", tag = "v0.13.0" }
30
- #typst-library = { git = "https://github.com/typst/typst.git", tag = "v0.13.0" }
31
- serde = { version = "1.0.217", features = ["derive"] }
29
+ serde = { version = "1.0.228", features = ["derive"] }
32
30
  serde_json = "1"
33
31
  serde_yaml = "0.9"
34
- typst = "0.13.1"
35
- typst-library = "0.13.1"
36
- typst-kit = { version = "0.13.1", features = [
32
+ typst = "0.14.2"
33
+ typst-library = "0.14.2"
34
+ typst-kit = { version = "0.14.2", features = [
37
35
  "downloads",
38
36
  "embed-fonts",
39
37
  "vendor-openssl",
40
38
  ] }
41
- typst-pdf = "0.13.1"
42
- typst-svg = "0.13.1"
43
- typst-html = "0.13.1"
44
- typst-render = "0.13.1"
45
- typst-eval = "0.13.1"
39
+ typst-pdf = "0.14.2"
40
+ typst-svg = "0.14.2"
41
+ typst-html = "0.14.2"
42
+ typst-render = "0.14.2"
43
+ typst-eval = "0.14.2"
46
44
  ureq = { version = "2", default-features = false, features = [
47
45
  "gzip",
48
46
  "socks-proxy",
@@ -51,4 +49,4 @@ walkdir = "2.4.0"
51
49
 
52
50
  # enable rb-sys feature to test against Ruby head. This is only needed if you
53
51
  # want to work with the unreleased, in-development, next version of Ruby
54
- rb-sys = { version = "0.9.116", default-features = false, features = ["stable-api-compiled-fallback"] }
52
+ rb-sys = { version = "0.9.123", default-features = false, features = ["stable-api-compiled-fallback"] }
@@ -4,9 +4,10 @@ use codespan_reporting::term::{self, termcolor};
4
4
  use ecow::{eco_format, EcoString};
5
5
  use typst::diag::{Severity, SourceDiagnostic, StrResult, Warned};
6
6
  use typst::foundations::Datetime;
7
- use typst::html::HtmlDocument;
7
+ use typst_html::HtmlDocument;
8
8
  use typst::layout::PagedDocument;
9
- use typst::syntax::{FileId, Source, Span};
9
+ //use typst::syntax::{FileId, Source, Span};
10
+ use typst::syntax::{FileId, Lines, Span};
10
11
  use typst::{World, WorldExt};
11
12
 
12
13
  use crate::world::SystemWorld;
@@ -167,7 +168,7 @@ pub fn format_diagnostics(
167
168
  )
168
169
  .with_labels(label(world, diagnostic.span).into_iter().collect());
169
170
 
170
- term::emit(&mut w, &config, world, &diag)?;
171
+ term::emit_to_write_style(&mut w, &config, world, &diag)?;
171
172
 
172
173
  // Stacktrace-like helper diagnostics.
173
174
  for point in &diagnostic.trace {
@@ -176,7 +177,7 @@ pub fn format_diagnostics(
176
177
  .with_message(message)
177
178
  .with_labels(label(world, point.span).into_iter().collect());
178
179
 
179
- term::emit(&mut w, &config, world, &help)?;
180
+ term::emit_to_write_style(&mut w, &config, world, &help)?;
180
181
  }
181
182
  }
182
183
 
@@ -192,7 +193,7 @@ fn label(world: &SystemWorld, span: Span) -> Option<Label<FileId>> {
192
193
  impl<'a> codespan_reporting::files::Files<'a> for SystemWorld {
193
194
  type FileId = FileId;
194
195
  type Name = String;
195
- type Source = Source;
196
+ type Source = Lines<String>;
196
197
 
197
198
  fn name(&'a self, id: FileId) -> CodespanResult<Self::Name> {
198
199
  let vpath = id.vpath();
data/ext/typst/src/lib.rs CHANGED
@@ -1,7 +1,6 @@
1
1
  use std::path::PathBuf;
2
2
 
3
- use magnus::{define_module, function, exception, Error }; //, IntoValue};
4
- use magnus::{prelude::*};
3
+ use magnus::{function, prelude::*, Error, Ruby};
5
4
 
6
5
  use std::collections::HashMap;
7
6
  use query::{query as typst_query, QueryCommand, SerializationFormat};
@@ -15,6 +14,7 @@ mod query;
15
14
  mod world;
16
15
 
17
16
  fn to_html(
17
+ ruby: &Ruby,
18
18
  input: PathBuf,
19
19
  root: Option<PathBuf>,
20
20
  font_paths: Vec<PathBuf>,
@@ -23,11 +23,11 @@ fn to_html(
23
23
  sys_inputs: HashMap<String, String>,
24
24
  ) -> Result<Vec<Vec<u8>>, Error> {
25
25
  let input = input.canonicalize()
26
- .map_err(|err| magnus::Error::new(exception::arg_error(), err.to_string()))?;
26
+ .map_err(|err| magnus::Error::new(ruby.exception_arg_error(), err.to_string()))?;
27
27
 
28
28
  let root = if let Some(root) = root {
29
29
  root.canonicalize()
30
- .map_err(|err| magnus::Error::new(exception::arg_error(), err.to_string()))?
30
+ .map_err(|err| magnus::Error::new(ruby.exception_arg_error(), err.to_string()))?
31
31
  } else if let Some(dir) = input.parent() {
32
32
  dir.into()
33
33
  } else {
@@ -35,12 +35,12 @@ fn to_html(
35
35
  };
36
36
 
37
37
  let resource_path = resource_path.canonicalize()
38
- .map_err(|err| magnus::Error::new(exception::arg_error(), err.to_string()))?;
38
+ .map_err(|err| magnus::Error::new(ruby.exception_arg_error(), err.to_string()))?;
39
39
 
40
40
  let mut default_fonts = Vec::new();
41
41
  for entry in walkdir::WalkDir::new(resource_path.join("fonts")) {
42
42
  let path = entry
43
- .map_err(|err| magnus::Error::new(exception::arg_error(), err.to_string()))?
43
+ .map_err(|err| magnus::Error::new(ruby.exception_arg_error(), err.to_string()))?
44
44
  .into_path();
45
45
  let Some(extension) = path.extension() else {
46
46
  continue;
@@ -72,16 +72,17 @@ fn to_html(
72
72
  .font_paths(font_paths)
73
73
  .ignore_system_fonts(ignore_system_fonts)
74
74
  .build()
75
- .map_err(|msg| magnus::Error::new(exception::arg_error(), msg.to_string()))?;
75
+ .map_err(|msg| magnus::Error::new(ruby.exception_arg_error(), msg.to_string()))?;
76
76
 
77
77
  let bytes = world
78
78
  .compile(Some("html"), None, &Vec::new())
79
- .map_err(|msg| magnus::Error::new(exception::arg_error(), msg.to_string()))?;
79
+ .map_err(|msg| magnus::Error::new(ruby.exception_arg_error(), msg.to_string()))?;
80
80
 
81
81
  Ok(bytes)
82
82
  }
83
83
 
84
84
  fn to_svg(
85
+ ruby: &Ruby,
85
86
  input: PathBuf,
86
87
  root: Option<PathBuf>,
87
88
  font_paths: Vec<PathBuf>,
@@ -90,11 +91,11 @@ fn to_svg(
90
91
  sys_inputs: HashMap<String, String>,
91
92
  ) -> Result<Vec<Vec<u8>>, Error> {
92
93
  let input = input.canonicalize()
93
- .map_err(|err| magnus::Error::new(exception::arg_error(), err.to_string()))?;
94
+ .map_err(|err| magnus::Error::new(ruby.exception_arg_error(), err.to_string()))?;
94
95
 
95
96
  let root = if let Some(root) = root {
96
97
  root.canonicalize()
97
- .map_err(|err| magnus::Error::new(exception::arg_error(), err.to_string()))?
98
+ .map_err(|err| magnus::Error::new(ruby.exception_arg_error(), err.to_string()))?
98
99
  } else if let Some(dir) = input.parent() {
99
100
  dir.into()
100
101
  } else {
@@ -102,12 +103,12 @@ fn to_svg(
102
103
  };
103
104
 
104
105
  let resource_path = resource_path.canonicalize()
105
- .map_err(|err| magnus::Error::new(exception::arg_error(), err.to_string()))?;
106
+ .map_err(|err| magnus::Error::new(ruby.exception_arg_error(), err.to_string()))?;
106
107
 
107
108
  let mut default_fonts = Vec::new();
108
109
  for entry in walkdir::WalkDir::new(resource_path.join("fonts")) {
109
110
  let path = entry
110
- .map_err(|err| magnus::Error::new(exception::arg_error(), err.to_string()))?
111
+ .map_err(|err| magnus::Error::new(ruby.exception_arg_error(), err.to_string()))?
111
112
  .into_path();
112
113
  let Some(extension) = path.extension() else {
113
114
  continue;
@@ -126,16 +127,17 @@ fn to_svg(
126
127
  .font_paths(font_paths)
127
128
  .ignore_system_fonts(ignore_system_fonts)
128
129
  .build()
129
- .map_err(|msg| magnus::Error::new(exception::arg_error(), msg.to_string()))?;
130
+ .map_err(|msg| magnus::Error::new(ruby.exception_arg_error(), msg.to_string()))?;
130
131
 
131
132
  let svg_bytes = world
132
133
  .compile(Some("svg"), None, &Vec::new())
133
- .map_err(|msg| magnus::Error::new(exception::arg_error(), msg.to_string()))?;
134
+ .map_err(|msg| magnus::Error::new(ruby.exception_arg_error(), msg.to_string()))?;
134
135
 
135
136
  Ok(svg_bytes)
136
137
  }
137
138
 
138
139
  fn to_png(
140
+ ruby: &Ruby,
139
141
  input: PathBuf,
140
142
  root: Option<PathBuf>,
141
143
  font_paths: Vec<PathBuf>,
@@ -144,11 +146,11 @@ fn to_png(
144
146
  sys_inputs: HashMap<String, String>,
145
147
  ) -> Result<Vec<Vec<u8>>, Error> {
146
148
  let input = input.canonicalize()
147
- .map_err(|err| magnus::Error::new(exception::arg_error(), err.to_string()))?;
149
+ .map_err(|err| magnus::Error::new(ruby.exception_arg_error(), err.to_string()))?;
148
150
 
149
151
  let root = if let Some(root) = root {
150
152
  root.canonicalize()
151
- .map_err(|err| magnus::Error::new(exception::arg_error(), err.to_string()))?
153
+ .map_err(|err| magnus::Error::new(ruby.exception_arg_error(), err.to_string()))?
152
154
  } else if let Some(dir) = input.parent() {
153
155
  dir.into()
154
156
  } else {
@@ -156,12 +158,12 @@ fn to_png(
156
158
  };
157
159
 
158
160
  let resource_path = resource_path.canonicalize()
159
- .map_err(|err| magnus::Error::new(exception::arg_error(), err.to_string()))?;
161
+ .map_err(|err| magnus::Error::new(ruby.exception_arg_error(), err.to_string()))?;
160
162
 
161
163
  let mut default_fonts = Vec::new();
162
164
  for entry in walkdir::WalkDir::new(resource_path.join("fonts")) {
163
165
  let path = entry
164
- .map_err(|err| magnus::Error::new(exception::arg_error(), err.to_string()))?
166
+ .map_err(|err| magnus::Error::new(ruby.exception_arg_error(), err.to_string()))?
165
167
  .into_path();
166
168
  let Some(extension) = path.extension() else {
167
169
  continue;
@@ -180,16 +182,17 @@ fn to_png(
180
182
  .font_paths(font_paths)
181
183
  .ignore_system_fonts(ignore_system_fonts)
182
184
  .build()
183
- .map_err(|msg| magnus::Error::new(exception::arg_error(), msg.to_string()))?;
185
+ .map_err(|msg| magnus::Error::new(ruby.exception_arg_error(), msg.to_string()))?;
184
186
 
185
187
  let bytes = world
186
188
  .compile(Some("png"), None, &Vec::new())
187
- .map_err(|msg| magnus::Error::new(exception::arg_error(), msg.to_string()))?;
189
+ .map_err(|msg| magnus::Error::new(ruby.exception_arg_error(), msg.to_string()))?;
188
190
 
189
191
  Ok(bytes)
190
192
  }
191
193
 
192
194
  fn to_pdf(
195
+ ruby: &Ruby,
193
196
  input: PathBuf,
194
197
  root: Option<PathBuf>,
195
198
  font_paths: Vec<PathBuf>,
@@ -198,11 +201,11 @@ fn to_pdf(
198
201
  sys_inputs: HashMap<String, String>,
199
202
  ) -> Result<Vec<Vec<u8>>, Error> {
200
203
  let input = input.canonicalize()
201
- .map_err(|err| magnus::Error::new(exception::arg_error(), err.to_string()))?;
204
+ .map_err(|err| magnus::Error::new(ruby.exception_arg_error(), err.to_string()))?;
202
205
 
203
206
  let root = if let Some(root) = root {
204
207
  root.canonicalize()
205
- .map_err(|err| magnus::Error::new(exception::arg_error(), err.to_string()))?
208
+ .map_err(|err| magnus::Error::new(ruby.exception_arg_error(), err.to_string()))?
206
209
  } else if let Some(dir) = input.parent() {
207
210
  dir.into()
208
211
  } else {
@@ -210,12 +213,12 @@ fn to_pdf(
210
213
  };
211
214
 
212
215
  let resource_path = resource_path.canonicalize()
213
- .map_err(|err| magnus::Error::new(exception::arg_error(), err.to_string()))?;
216
+ .map_err(|err| magnus::Error::new(ruby.exception_arg_error(), err.to_string()))?;
214
217
 
215
218
  let mut default_fonts = Vec::new();
216
219
  for entry in walkdir::WalkDir::new(resource_path.join("fonts")) {
217
220
  let path = entry
218
- .map_err(|err| magnus::Error::new(exception::arg_error(), err.to_string()))?
221
+ .map_err(|err| magnus::Error::new(ruby.exception_arg_error(), err.to_string()))?
219
222
  .into_path();
220
223
  let Some(extension) = path.extension() else {
221
224
  continue;
@@ -234,16 +237,17 @@ fn to_pdf(
234
237
  .font_paths(font_paths)
235
238
  .ignore_system_fonts(ignore_system_fonts)
236
239
  .build()
237
- .map_err(|msg| magnus::Error::new(exception::arg_error(), msg.to_string()))?;
240
+ .map_err(|msg| magnus::Error::new(ruby.exception_arg_error(), msg.to_string()))?;
238
241
 
239
242
  let pdf_bytes = world
240
243
  .compile(Some("pdf"), None, &Vec::new())
241
- .map_err(|msg| magnus::Error::new(exception::arg_error(), msg.to_string()))?;
244
+ .map_err(|msg| magnus::Error::new(ruby.exception_arg_error(), msg.to_string()))?;
242
245
 
243
246
  Ok(pdf_bytes)
244
247
  }
245
248
 
246
249
  fn query(
250
+ ruby: &Ruby,
247
251
  selector: String,
248
252
  field: Option<String>,
249
253
  one: bool,
@@ -258,15 +262,15 @@ fn query(
258
262
  let format = match format.unwrap().to_ascii_lowercase().as_str() {
259
263
  "json" => SerializationFormat::Json,
260
264
  "yaml" => SerializationFormat::Yaml,
261
- _ => return Err(magnus::Error::new(exception::arg_error(), "unsupported serialization format"))?,
265
+ _ => return Err(magnus::Error::new(ruby.exception_arg_error(), "unsupported serialization format"))?,
262
266
  };
263
267
 
264
268
  let input = input.canonicalize()
265
- .map_err(|err| magnus::Error::new(exception::arg_error(), err.to_string()))?;
269
+ .map_err(|err| magnus::Error::new(ruby.exception_arg_error(), err.to_string()))?;
266
270
 
267
271
  let root = if let Some(root) = root {
268
272
  root.canonicalize()
269
- .map_err(|err| magnus::Error::new(exception::arg_error(), err.to_string()))?
273
+ .map_err(|err| magnus::Error::new(ruby.exception_arg_error(), err.to_string()))?
270
274
  } else if let Some(dir) = input.parent() {
271
275
  dir.into()
272
276
  } else {
@@ -274,12 +278,12 @@ fn query(
274
278
  };
275
279
 
276
280
  let resource_path = resource_path.canonicalize()
277
- .map_err(|err| magnus::Error::new(exception::arg_error(), err.to_string()))?;
281
+ .map_err(|err| magnus::Error::new(ruby.exception_arg_error(), err.to_string()))?;
278
282
 
279
283
  let mut default_fonts = Vec::new();
280
284
  for entry in walkdir::WalkDir::new(resource_path.join("fonts")) {
281
285
  let path = entry
282
- .map_err(|err| magnus::Error::new(exception::arg_error(), err.to_string()))?
286
+ .map_err(|err| magnus::Error::new(ruby.exception_arg_error(), err.to_string()))?
283
287
  .into_path();
284
288
  let Some(extension) = path.extension() else {
285
289
  continue;
@@ -298,7 +302,7 @@ fn query(
298
302
  .font_paths(font_paths)
299
303
  .ignore_system_fonts(ignore_system_fonts)
300
304
  .build()
301
- .map_err(|msg| magnus::Error::new(exception::arg_error(), msg.to_string()))?;
305
+ .map_err(|msg| magnus::Error::new(ruby.exception_arg_error(), msg.to_string()))?;
302
306
 
303
307
  let result = typst_query(
304
308
  &mut world,
@@ -312,15 +316,15 @@ fn query(
312
316
 
313
317
  match result {
314
318
  Ok(data) => Ok(data),
315
- Err(msg) => Err(magnus::Error::new(exception::arg_error(), msg.to_string())),
319
+ Err(msg) => Err(magnus::Error::new(ruby.exception_arg_error(), msg.to_string())),
316
320
  }
317
321
  }
318
322
 
319
323
  #[magnus::init]
320
- fn init() -> Result<(), Error> {
324
+ fn init(ruby: &Ruby) -> Result<(), Error> {
321
325
  env_logger::init();
322
326
 
323
- let module = define_module("Typst")?;
327
+ let module = ruby.define_module("Typst")?;
324
328
  module.define_singleton_method("_to_pdf", function!(to_pdf, 6))?;
325
329
  module.define_singleton_method("_to_svg", function!(to_svg, 6))?;
326
330
  module.define_singleton_method("_to_png", function!(to_png, 6))?;
@@ -2,11 +2,13 @@ use comemo::Track;
2
2
  use ecow::{eco_format, EcoString};
3
3
  use serde::Serialize;
4
4
  use typst::diag::{bail, StrResult, Warned};
5
+ use typst::engine::Sink;
5
6
  use typst::foundations::{Content, IntoValue, LocatableSelector, Scope};
6
7
  use typst::layout::PagedDocument;
7
8
  use typst::syntax::Span;
9
+ use typst::syntax::SyntaxMode;
8
10
  use typst::World;
9
- use typst_eval::{eval_string, EvalMode};
11
+ use typst_eval::eval_string; //{eval_string, EvalMode};
10
12
 
11
13
  use crate::world::SystemWorld;
12
14
 
@@ -73,9 +75,10 @@ fn retrieve(
73
75
  let selector = eval_string(
74
76
  &typst::ROUTINES,
75
77
  world.track(),
78
+ Sink::new().track_mut(),
76
79
  &command.selector,
77
80
  Span::detached(),
78
- EvalMode::Code,
81
+ SyntaxMode::Code,
79
82
  Scope::default(),
80
83
  )
81
84
  .map_err(|errors| {
@@ -3,13 +3,14 @@ use std::path::{Path, PathBuf};
3
3
  use std::sync::{Mutex, OnceLock};
4
4
 
5
5
  use chrono::{DateTime, Datelike, Local};
6
+ //use rustc_hash::FxHashMap;
6
7
  use ecow::eco_format;
7
8
  use typst::diag::{FileError, FileResult, StrResult};
8
9
  use typst::foundations::{Bytes, Datetime, Dict};
9
- use typst::syntax::{FileId, Source, VirtualPath};
10
+ use typst::syntax::{FileId, Lines, Source, VirtualPath};
10
11
  use typst::text::{Font, FontBook};
11
12
  use typst::utils::LazyHash;
12
- use typst::{Features, Library, LibraryBuilder, World};
13
+ use typst::{Features, Library, LibraryExt, World};
13
14
  use typst_kit::{
14
15
  fonts::{FontSearcher, FontSlot},
15
16
  package::PackageStorage,
@@ -129,9 +130,20 @@ impl SystemWorld {
129
130
 
130
131
  /// Lookup a source file by id.
131
132
  #[track_caller]
132
- pub fn lookup(&self, id: FileId) -> Source {
133
- self.source(id)
134
- .expect("file id does not point to any source file")
133
+ pub fn lookup(&self, id: FileId) -> Lines<String> {
134
+ // self.source(id)
135
+ // .expect("file id does not point to any source file")
136
+ self.slot(id, |slot| {
137
+ if let Some(source) = slot.source.get() {
138
+ let source = source.as_ref().expect("file is not valid");
139
+ source.lines().clone()
140
+ } else if let Some(bytes) = slot.file.get() {
141
+ let bytes = bytes.as_ref().expect("file is not valid");
142
+ Lines::try_from(bytes).expect("file is not valid utf-8")
143
+ } else {
144
+ panic!("file id does not point to any source file");
145
+ }
146
+ })
135
147
  }
136
148
  }
137
149
 
@@ -193,7 +205,7 @@ impl SystemWorldBuilder {
193
205
  input,
194
206
  root: self.root,
195
207
  main: FileId::new(None, main_path),
196
- library: LazyHash::new(LibraryBuilder::default().with_inputs(self.inputs).with_features(self.features).build()),
208
+ library: LazyHash::new(Library::builder().with_inputs(self.inputs).with_features(self.features).build()),
197
209
  book: LazyHash::new(fonts.book),
198
210
  fonts: fonts.fonts,
199
211
  slots: Mutex::default(),
@@ -300,6 +312,11 @@ impl<T: Clone> SlotCell<T> {
300
312
  self.accessed = false;
301
313
  }
302
314
 
315
+ /// Gets the contents of the cell.
316
+ fn get(&self) -> Option<&FileResult<T>> {
317
+ self.data.as_ref()
318
+ }
319
+
303
320
  /// Gets the contents of the cell or initialize them.
304
321
  fn get_or_init(
305
322
  &mut self,
Binary file
metadata CHANGED
@@ -1,57 +1,62 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: typst
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.13.5
4
+ version: 0.14.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Flinn
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2025-06-30 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: rb_sys
15
14
  requirement: !ruby/object:Gem::Requirement
16
15
  requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '0.9'
17
19
  - - ">="
18
20
  - !ruby/object:Gem::Version
19
- version: 0.9.116
21
+ version: 0.9.123
20
22
  type: :runtime
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
23
25
  requirements:
26
+ - - "~>"
27
+ - !ruby/object:Gem::Version
28
+ version: '0.9'
24
29
  - - ">="
25
30
  - !ruby/object:Gem::Version
26
- version: 0.9.116
31
+ version: 0.9.123
27
32
  - !ruby/object:Gem::Dependency
28
33
  name: rubyzip
29
34
  requirement: !ruby/object:Gem::Requirement
30
35
  requirements:
31
36
  - - "~>"
32
37
  - !ruby/object:Gem::Version
33
- version: '2.4'
38
+ version: '3.2'
34
39
  type: :runtime
35
40
  prerelease: false
36
41
  version_requirements: !ruby/object:Gem::Requirement
37
42
  requirements:
38
43
  - - "~>"
39
44
  - !ruby/object:Gem::Version
40
- version: '2.4'
45
+ version: '3.2'
41
46
  - !ruby/object:Gem::Dependency
42
47
  name: hexapdf
43
48
  requirement: !ruby/object:Gem::Requirement
44
49
  requirements:
45
50
  - - "~>"
46
51
  - !ruby/object:Gem::Version
47
- version: '1.3'
52
+ version: '1.5'
48
53
  type: :development
49
54
  prerelease: false
50
55
  version_requirements: !ruby/object:Gem::Requirement
51
56
  requirements:
52
57
  - - "~>"
53
58
  - !ruby/object:Gem::Version
54
- version: '1.3'
59
+ version: '1.5'
55
60
  - !ruby/object:Gem::Dependency
56
61
  name: test-unit
57
62
  requirement: !ruby/object:Gem::Requirement
@@ -66,7 +71,6 @@ dependencies:
66
71
  - - "~>"
67
72
  - !ruby/object:Gem::Version
68
73
  version: '3.6'
69
- description:
70
74
  email: flinn@actsasflinn.com
71
75
  executables: []
72
76
  extensions:
@@ -79,7 +83,6 @@ files:
79
83
  - Rakefile
80
84
  - ext/typst/Cargo.toml
81
85
  - ext/typst/extconf.rb
82
- - ext/typst/src/compiler-new.rs
83
86
  - ext/typst/src/compiler.rs
84
87
  - ext/typst/src/download.rs
85
88
  - ext/typst/src/fonts.rs
@@ -110,11 +113,11 @@ files:
110
113
  - lib/formats/svg.rb
111
114
  - lib/query.rb
112
115
  - lib/typst.rb
116
+ - lib/typst/typst.bundle
113
117
  homepage: https://github.com/actsasflinn/typst-rb
114
118
  licenses:
115
119
  - Apache-2.0
116
120
  metadata: {}
117
- post_install_message:
118
121
  rdoc_options: []
119
122
  require_paths:
120
123
  - lib
@@ -129,8 +132,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
129
132
  - !ruby/object:Gem::Version
130
133
  version: '0'
131
134
  requirements: []
132
- rubygems_version: 3.3.26
133
- signing_key:
135
+ rubygems_version: 3.6.9
134
136
  specification_version: 4
135
137
  summary: Ruby binding to typst, a new markup-based typesetting system that is powerful
136
138
  and easy to learn.