@@ -12,8 +12,8 @@ use std::{
1212} ;
1313
1414use reflexo_typst:: {
15- font:: { pure:: MemoryFontBuilder , FontResolverImpl } ,
16- package:: { dummy :: DummyRegistry , PackageRegistry , PackageSpec , RegistryPathMapper } ,
15+ font:: { pure:: MemoryFontSearcher , FontResolverImpl } ,
16+ package:: { PackageRegistry , PackageSpec , RegistryPathMapper } ,
1717 typst:: prelude:: EcoVec ,
1818 vfs:: { dummy:: DummyAccessModel , FileSnapshot } ,
1919 CompilerUniverse , EntryReader , EntryState , ShadowApi , TaskInputs , TypstDocument ,
@@ -188,22 +188,34 @@ fn create_world() -> StrResult<WorldRepr> {
188188
189189 /// Creates a world based on the context.
190190 fn resolve_world_inner ( ) -> StrResult < WorldRepr > {
191- // Adds embedded fonts.
192- let mut fb = MemoryFontBuilder :: new ( ) ;
193- let mut pb = MemoryPackageBuilder :: default ( ) ;
191+ let data_guard = DATA . lock ( ) . unwrap ( ) ;
194192
195- let registry = Arc :: new ( DummyRegistry ) ;
196- let resolver = Arc :: new ( RegistryPathMapper :: new ( registry . clone ( ) ) ) ;
197- let mut vfs = reflexo_typst :: vfs :: Vfs :: new ( resolver , DummyAccessModel ) ;
193+ // Adds embedded fonts.
194+ let mut fb = MemoryFontSearcher :: new ( ) ;
195+ let mut pb = MemoryRegistry :: default ( ) ;
198196
199- for data in & DATA . lock ( ) . unwrap ( ) . data {
197+ for data in & data_guard . data {
200198 match data {
201199 DataRef :: Font { data, .. } => {
202200 fb. add_memory_font ( data. clone ( ) . unwrap ( ) . 0 ) ;
203201 }
202+ DataRef :: Package { spec, .. } => {
203+ let spec = PackageSpec :: from_str ( spec) . map_err ( |e| e. to_string ( ) ) ?;
204+ pb. add_memory_package ( spec) ;
205+ }
206+ DataRef :: File { .. } => { }
207+ }
208+ }
209+
210+ let registry = Arc :: new ( pb) ;
211+ let resolver = Arc :: new ( RegistryPathMapper :: new ( registry. clone ( ) ) ) ;
212+ let mut vfs = reflexo_typst:: vfs:: Vfs :: new ( resolver, DummyAccessModel ) ;
213+
214+ for data in & data_guard. data {
215+ match data {
204216 DataRef :: Package { data, spec, .. } => {
205217 let spec = PackageSpec :: from_str ( spec) . map_err ( |e| e. to_string ( ) ) ?;
206- let path = pb . add_memory_package ( spec) ;
218+ let path = registry . resolve ( & spec) . map_err ( |e| e . to_string ( ) ) ? ;
207219
208220 let data = data. clone ( ) . unwrap ( ) . 0 ;
209221 extract_package ( & data, |key, value, _mtime| {
@@ -215,7 +227,7 @@ fn create_world() -> StrResult<WorldRepr> {
215227 . map_err ( |e| e. to_string ( ) )
216228 } ) ?;
217229 }
218- DataRef :: File { .. } => { }
230+ DataRef :: Font { .. } | DataRef :: File { .. } => { }
219231 }
220232 }
221233
@@ -230,7 +242,7 @@ fn create_world() -> StrResult<WorldRepr> {
230242 None ,
231243 vfs,
232244 registry,
233- Arc :: new ( fb. into ( ) ) ,
245+ Arc :: new ( fb. build ( ) ) ,
234246 ) ;
235247
236248 Ok ( world)
@@ -335,7 +347,7 @@ impl reflexo_typst::world::CompilerFeat for WasmCompilerFeat {
335347 /// It accesses no file system.
336348 type AccessModel = DummyAccessModel ;
337349 /// It cannot load any package.
338- type Registry = DummyRegistry ;
350+ type Registry = MemoryRegistry ;
339351}
340352
341353type WorldRepr = reflexo_typst:: world:: CompilerUniverse < WasmCompilerFeat > ;
@@ -354,12 +366,12 @@ impl TypstWasmWorld {
354366 /// Create a new [`TypstWasmWorld`].
355367 pub fn new ( ) -> Self {
356368 // Creates a virtual file system.
357- let registry = Arc :: new ( DummyRegistry ) ;
369+ let registry = Arc :: new ( MemoryRegistry :: default ( ) ) ;
358370 let resolver = Arc :: new ( RegistryPathMapper :: new ( registry. clone ( ) ) ) ;
359371 let vfs = reflexo_typst:: vfs:: Vfs :: new ( resolver, DummyAccessModel ) ;
360372
361373 // Adds embedded fonts.
362- let mut fb = MemoryFontBuilder :: new ( ) ;
374+ let mut fb = MemoryFontSearcher :: new ( ) ;
363375
364376 for data in EMBEDDED_FONT {
365377 fb. add_memory_font ( Bytes :: new ( data) ) ;
@@ -372,18 +384,18 @@ impl TypstWasmWorld {
372384 None ,
373385 vfs,
374386 registry,
375- Arc :: new ( fb. into ( ) ) ,
387+ Arc :: new ( fb. build ( ) ) ,
376388 ) )
377389 }
378390}
379391
380392pub static EMBEDDED_FONT : & [ & [ u8 ] ] = & [ ] ;
381393
382- /// A builder of memory package.
394+ /// Creates a memory package registry from the builder .
383395#[ derive( Default , Debug ) ]
384- pub struct MemoryPackageBuilder ( HashMap < PackageSpec , Arc < Path > > ) ;
396+ pub struct MemoryRegistry ( HashMap < PackageSpec , Arc < Path > > ) ;
385397
386- impl MemoryPackageBuilder {
398+ impl MemoryRegistry {
387399 /// Adds a memory package.
388400 pub fn add_memory_package ( & mut self , spec : PackageSpec ) -> Arc < Path > {
389401 let package_root: Arc < Path > = PathBuf :: from ( "/internal-packages" )
@@ -397,10 +409,7 @@ impl MemoryPackageBuilder {
397409 }
398410}
399411
400- #[ derive( Default , Debug ) ]
401- pub struct MemoryPackageRegistry ( HashMap < PackageSpec , Arc < Path > > ) ;
402-
403- impl PackageRegistry for MemoryPackageRegistry {
412+ impl PackageRegistry for MemoryRegistry {
404413 /// Resolves a package.
405414 fn resolve ( & self , spec : & PackageSpec ) -> Result < Arc < Path > , PackageError > {
406415 self . 0
0 commit comments