Crate tectonic_io_base
source · [−]Expand description
Tectonic’s pluggable I/O backend.
This crates defines the core traits and types used by Tectonic’s I/O
subsystem, and provides implementations for common stdlib types. It provides
a simplified I/O model compatible with TeX’s usage patterns, as encapsulated
in the IoProvider
trait. Files are exposed as InputHandle
or
OutputHandle
structs, which add a layer of bookkeeping to allow the
higher levels of Tectonic to determine when the engine needs to be re-run.
Modules
Default directories for per-user Tectonic files.
Helpers to tidy up the computation of digests in various places.
Tectonic I/O implementations for
std::fs
types.Tectonic I/O implementations for types provided by
flate2
.An “I/O stack” is an I/O provider that delegates requests to
a series of sub-providers in turn.
Tectonic I/O trait implementations for the standard I/O streams.
Structs
Input handles are basically Read objects with a few extras. We don’t
require the standard io::Seek because we need to provide a dummy
implementation for GZip streams, which we wouldn’t be allowed to do
because both the trait and the target struct are outside of our crate.
A handle for Tectonic output streams.
Enums
What kind of source an input file ultimately came from. We keep track of
this in order to be able to emit Makefile-style dependencies for input
files. Right now, we only provide enough options to achieve this goal; we
could add more.
A convenience type for file-open operations when “not found” needs to be
handled specially.
Errors that are generic to Tectonic’s framework, but not capturable as
IoErrors.
Traits
A hack to allow casting of Bundles to IoProviders.
An extension to the basic Read trait supporting additional features
needed for Tectonic’s I/O system.
A trait for types that can read or write files needed by the TeX engine.
Functions
Normalize a TeX path if possible, otherwise return the original path.
Try to open a file on the fileystem, returning an
OpenResult
type
allowing easy handling if the file was not found.