diff options
Diffstat (limited to 'support/texlab/src/tex/texlive.rs')
-rw-r--r-- | support/texlab/src/tex/texlive.rs | 71 |
1 files changed, 0 insertions, 71 deletions
diff --git a/support/texlab/src/tex/texlive.rs b/support/texlab/src/tex/texlive.rs deleted file mode 100644 index 5afb763d9e..0000000000 --- a/support/texlab/src/tex/texlive.rs +++ /dev/null @@ -1,71 +0,0 @@ -use super::{ - compile, - kpsewhich::{self, KpsewhichError, Resolver}, - Artifacts, CompileError, CompileParams, Distribution, DistributionKind, -}; -use async_trait::async_trait; -use futures::lock::Mutex; -use std::{ - io, - path::{Path, PathBuf}, - str::Lines, - sync::Arc, -}; -use tokio::fs; - -#[derive(Debug, Default)] -pub struct Texlive { - resolver: Mutex<Arc<Resolver>>, -} - -#[async_trait] -impl Distribution for Texlive { - fn kind(&self) -> DistributionKind { - DistributionKind::Texlive - } - - async fn compile<'a>(&'a self, params: CompileParams<'a>) -> Result<Artifacts, CompileError> { - compile(params).await - } - - async fn load(&self) -> Result<(), KpsewhichError> { - let root_directories = kpsewhich::root_directories().await?; - let resolver = kpsewhich::parse_database(&root_directories, read_database).await?; - *self.resolver.lock().await = Arc::new(resolver); - Ok(()) - } - - async fn resolver(&self) -> Arc<Resolver> { - let resolver = self.resolver.lock().await; - Arc::clone(&resolver) - } -} - -const DATABASE_PATH: &str = "ls-R"; - -async fn read_database(directory: &Path) -> Result<Vec<PathBuf>, KpsewhichError> { - let file = directory.join(DATABASE_PATH); - if !file.is_file() { - return Ok(Vec::new()); - } - - let text = fs::read_to_string(file) - .await - .map_err(|_| KpsewhichError::NoDatabase)?; - parse_database(text.lines()).map_err(|_| KpsewhichError::CorruptDatabase) -} - -fn parse_database(lines: Lines) -> io::Result<Vec<PathBuf>> { - let mut paths = Vec::new(); - let mut directory = ""; - - for line in lines.filter(|x| !x.trim().is_empty() && !x.starts_with('%')) { - if line.ends_with(':') { - directory = &line[..line.len() - 1]; - } else { - let path = PathBuf::from(directory).join(line); - paths.push(path); - } - } - Ok(paths) -} |