pub trait ResourceProvider {
Show 13 methods
// Required method
fn read_request(
&self,
request: &ResourceRequest,
) -> Result<Resource, ResourceError>;
// Provided methods
fn read(
&self,
name: &str,
kind: ResourceKind,
) -> Result<Resource, ResourceError> { ... }
fn read_tex_input(&self, name: &str) -> Result<Resource, ResourceError> { ... }
fn read_package(&self, name: &str) -> Result<Resource, ResourceError> { ... }
fn read_class(&self, name: &str) -> Result<Resource, ResourceError> { ... }
fn read_font_definition(
&self,
name: &str,
) -> Result<Resource, ResourceError> { ... }
fn read_package_support(
&self,
name: &str,
) -> Result<Resource, ResourceError> { ... }
fn read_font(&self, name: &str) -> Result<Resource, ResourceError> { ... }
fn read_encoding(&self, name: &str) -> Result<Resource, ResourceError> { ... }
fn read_map(&self, name: &str) -> Result<Resource, ResourceError> { ... }
fn read_config(&self, name: &str) -> Result<Resource, ResourceError> { ... }
fn read_format_image(&self, name: &str) -> Result<Resource, ResourceError> { ... }
fn read_asset(
&self,
package: &str,
name: &str,
) -> Result<Resource, ResourceError> { ... }
}Expand description
Resolves TeX inputs, packages, fonts, encodings, maps, and config assets.
Required Methods§
Sourcefn read_request(
&self,
request: &ResourceRequest,
) -> Result<Resource, ResourceError>
fn read_request( &self, request: &ResourceRequest, ) -> Result<Resource, ResourceError>
Resolve an arbitrary resource described by request.
Provided Methods§
Sourcefn read(
&self,
name: &str,
kind: ResourceKind,
) -> Result<Resource, ResourceError>
fn read( &self, name: &str, kind: ResourceKind, ) -> Result<Resource, ResourceError>
Resolve name as a resource of the given kind.
Examples found in repository?
examples/pack_native_format.rs (line 46)
44 fn read_request(&self, request: &ResourceRequest) -> Result<Resource, ResourceError> {
45 let name = Self::font_name(&request.canonical_name());
46 self.texmf.read(&name, ResourceKind::Font)
47 }
48}
49
50struct NativeFontSystem {
51 inner: RustybuzzFontSystem<ResourceFontSystem<TexmfFontProvider>>,
52}
53
54impl NativeFontSystem {
55 fn new(texmf: Arc<TexmfResources>) -> Self {
56 Self {
57 inner: RustybuzzFontSystem::new(ResourceFontSystem::new(TexmfFontProvider { texmf })),
58 }
59 }
60}
61
62impl FontSystem for NativeFontSystem {
63 fn load_font(&self, query: &FontQuery) -> Result<FontData, FontError> {
64 self.inner.load_font(query)
65 }
66
67 fn shape_text(&self, request: &ShapeRequest<'_>) -> Result<ShapedText, FontError> {
68 self.inner.shape_text(request)
69 }
70}
71
72fn main() -> ExitCode {
73 let Some(output) = output_path() else {
74 eprintln!("usage: pack_native_format <output path>");
75 return ExitCode::FAILURE;
76 };
77 let Some(texmf_root) = find_texmf_root() else {
78 eprintln!("cannot find a texmf-dist ls-R index");
79 return ExitCode::FAILURE;
80 };
81 let Some(texmf) = TexmfResources::from_root(texmf_root) else {
82 eprintln!("cannot load the texmf-dist ls-R index");
83 return ExitCode::FAILURE;
84 };
85 let texmf = Arc::new(texmf);
86
87 let latex = match texmf.read("latex.ltx", ResourceKind::TexInput) {
88 Ok(resource) => resource.bytes,
89 Err(error) => {
90 eprintln!("cannot read latex.ltx: {error:?}");
91 return ExitCode::FAILURE;
92 }
93 };
94
95 let cache = GeneratedFormatCache::initialized(pe::EngineProfile::xetex());
96 let mut engine = cache
97 .instantiate(
98 pe::EngineProfile::xetex(),
99 GeneratedResourceProvider::new(&*texmf),
100 )
101 .with_font_platform(GeneratedFontSystemAdapter::new(NativeFontSystem::new(
102 texmf.clone(),
103 )));
104
105 if !engine.begin_primary_input("latex.ltx", latex) {
106 eprintln!("failed to begin latex.ltx");
107 return ExitCode::FAILURE;
108 }
109 engine.run_format_initialization();
110 if !engine.begin_primary_input("preamble.tex", PREAMBLE.to_vec()) {
111 eprintln!("failed to begin preamble");
112 return ExitCode::FAILURE;
113 }
114 engine.run_format_initialization();
115
116 engine.finalize_trie();
117 let format_bytes = GeneratedFormatCache::from_engine(&engine).to_bytes();
118 let font_table = engine.native_font_table();
119 let packaged = mathtex_engine::generated::pack_packaged_format(&format_bytes, &font_table);
120 if let Err(error) = std::fs::write(&output, packaged) {
121 eprintln!("cannot write {}: {error}", output.display());
122 return ExitCode::FAILURE;
123 }
124 ExitCode::SUCCESS
125}Sourcefn read_tex_input(&self, name: &str) -> Result<Resource, ResourceError>
fn read_tex_input(&self, name: &str) -> Result<Resource, ResourceError>
Resolve a TeX input file by name.
Sourcefn read_package(&self, name: &str) -> Result<Resource, ResourceError>
fn read_package(&self, name: &str) -> Result<Resource, ResourceError>
Resolve a LaTeX package file by name.
Sourcefn read_class(&self, name: &str) -> Result<Resource, ResourceError>
fn read_class(&self, name: &str) -> Result<Resource, ResourceError>
Resolve a LaTeX class file by name.
Sourcefn read_font_definition(&self, name: &str) -> Result<Resource, ResourceError>
fn read_font_definition(&self, name: &str) -> Result<Resource, ResourceError>
Resolve a font definition file by name.
Sourcefn read_package_support(&self, name: &str) -> Result<Resource, ResourceError>
fn read_package_support(&self, name: &str) -> Result<Resource, ResourceError>
Resolve a package support file by name.
Sourcefn read_font(&self, name: &str) -> Result<Resource, ResourceError>
fn read_font(&self, name: &str) -> Result<Resource, ResourceError>
Resolve a font program or collection by name.
Sourcefn read_encoding(&self, name: &str) -> Result<Resource, ResourceError>
fn read_encoding(&self, name: &str) -> Result<Resource, ResourceError>
Resolve a font encoding file by name.
Sourcefn read_map(&self, name: &str) -> Result<Resource, ResourceError>
fn read_map(&self, name: &str) -> Result<Resource, ResourceError>
Resolve a font map file by name.
Sourcefn read_config(&self, name: &str) -> Result<Resource, ResourceError>
fn read_config(&self, name: &str) -> Result<Resource, ResourceError>
Resolve a configuration file by name.
Sourcefn read_format_image(&self, name: &str) -> Result<Resource, ResourceError>
fn read_format_image(&self, name: &str) -> Result<Resource, ResourceError>
Resolve a precompiled format image by name.
Sourcefn read_asset(
&self,
package: &str,
name: &str,
) -> Result<Resource, ResourceError>
fn read_asset( &self, package: &str, name: &str, ) -> Result<Resource, ResourceError>
Resolve a package-owned asset by package and asset name.
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".
Implementations on Foreign Types§
Source§impl<T> ResourceProvider for &Twhere
T: ResourceProvider,
impl<T> ResourceProvider for &Twhere
T: ResourceProvider,
fn read_request( &self, request: &ResourceRequest, ) -> Result<Resource, ResourceError>
Implementors§
impl ResourceProvider for FileSystemResourceProvider
Available on crate feature
std only.