pub struct GeneratedFormatCache { /* private fields */ }Expand description
A cached snapshot of a generated engine format image for repeated instantiation.
Implementations§
Source§impl GeneratedFormatCache
impl GeneratedFormatCache
Sourcepub fn initialized(profile: EngineProfile) -> Self
pub fn initialized(profile: EngineProfile) -> Self
Initializes a generated engine once and snapshots it as a reusable format cache.
Examples found in repository?
examples/pack_native_format.rs (line 95)
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}Sourcepub fn from_engine(engine: &PortableTexEngine<'_>) -> Self
pub fn from_engine(engine: &PortableTexEngine<'_>) -> Self
Snapshots the engine’s current format state into a reusable cache.
Examples found in repository?
examples/pack_native_format.rs (line 117)
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}Sourcepub fn from_engine_owned(engine: PortableTexEngine<'_>) -> Self
pub fn from_engine_owned(engine: PortableTexEngine<'_>) -> Self
Consumes an engine into a format cache by moving its state in place, avoiding a full clone.
Sourcepub fn image(&self) -> &PortableFormatImage
pub fn image(&self) -> &PortableFormatImage
Returns a reference to the raw format image.
Sourcepub fn to_bytes(&self) -> Vec<u8> ⓘ
pub fn to_bytes(&self) -> Vec<u8> ⓘ
Serializes the format image to a buffer valid for the same build target only.
Examples found in repository?
examples/pack_native_format.rs (line 117)
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}Sourcepub fn from_bytes(bytes: &[u8]) -> Option<Self>
pub fn from_bytes(bytes: &[u8]) -> Option<Self>
Deserializes a format cache from a buffer produced by Self::to_bytes.
Sourcepub fn from_static_bytes(bytes: &'static [u8]) -> Option<Self>
pub fn from_static_bytes(bytes: &'static [u8]) -> Option<Self>
Borrows a static serialized image without allocating or copying its contents.
Sourcepub fn instantiate<'resources, R>(
&self,
profile: EngineProfile,
resources: R,
) -> PortableTexEngine<'resources>where
R: ResourceProvider + 'resources,
pub fn instantiate<'resources, R>(
&self,
profile: EngineProfile,
resources: R,
) -> PortableTexEngine<'resources>where
R: ResourceProvider + 'resources,
Creates a new engine instance from this cached format image.
Examples found in repository?
examples/pack_native_format.rs (lines 97-100)
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}Trait Implementations§
Source§impl Clone for GeneratedFormatCache
impl Clone for GeneratedFormatCache
Source§impl Debug for GeneratedFormatCache
impl Debug for GeneratedFormatCache
Auto Trait Implementations§
impl !Send for GeneratedFormatCache
impl !Sync for GeneratedFormatCache
impl Freeze for GeneratedFormatCache
impl RefUnwindSafe for GeneratedFormatCache
impl Unpin for GeneratedFormatCache
impl UnsafeUnpin for GeneratedFormatCache
impl UnwindSafe for GeneratedFormatCache
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more