├── example.epub ├── example.html ├── .gitignore ├── CODE_OF_CONDUCT.md ├── .github ├── workflows │ └── rust.yml └── dependabot.yml ├── Cargo.toml ├── src ├── epub.rs ├── converter.rs ├── highlighting.rs ├── cli.rs ├── utils.rs ├── main.rs └── image.rs ├── LICENSE ├── CONTRIBUTING.md ├── README.md ├── output.epub └── Cargo.lock /example.epub: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /example.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.github/workflows/rust.yml: -------------------------------------------------------------------------------- 1 | name: Rust 2 | 3 | on: 4 | push: 5 | branches: [ "main" ] 6 | pull_request: 7 | branches: [ "main" ] 8 | 9 | env: 10 | CARGO_TERM_COLOR: always 11 | 12 | jobs: 13 | build: 14 | 15 | runs-on: ubuntu-latest 16 | 17 | steps: 18 | - uses: actions/checkout@v3 19 | - name: Build 20 | run: cargo build --verbose 21 | - name: Run tests 22 | run: cargo test --verbose 23 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "textscribe" 3 | version = "0.1.4" 4 | edition = "2021" 5 | 6 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 7 | 8 | [dependencies] 9 | pulldown-cmark = "0.9.3" 10 | clap = "2.33" 11 | clipboard = "0.5" 12 | webbrowser = "0.8" 13 | base64 = "0.13" 14 | image = "0.23" 15 | syntect = "4.6.0" 16 | log = "0.4.14" 17 | env_logger = "0.9.0" 18 | epub-builder = "0.6" 19 | anyhow = "1.0.86" 20 | rayon = "1.10.0" 21 | arc = "0.0.1" 22 | regex = "1.10.5" 23 | 24 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for all configuration options: 4 | # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 5 | 6 | version: 2 7 | updates: 8 | - package-ecosystem: "" # See documentation for possible values 9 | directory: "/" # Location of package manifests 10 | schedule: 11 | interval: "weekly" 12 | -------------------------------------------------------------------------------- /src/epub.rs: -------------------------------------------------------------------------------- 1 | // src/epub.rs 2 | use epub_builder::{EpubBuilder, EpubContent, ZipLibrary, Result as EpubResult}; 3 | use log::info; 4 | 5 | pub fn convert_to_epub(html: &str, output_file_path: &str, author: &str, title: &str) -> EpubResult<()> { 6 | let mut epub = EpubBuilder::new(ZipLibrary::new()?)?; 7 | 8 | epub.metadata("author", author)?; 9 | epub.metadata("title", title)?; 10 | 11 | epub.add_content(EpubContent::new("chapter1.html", html.as_bytes()) 12 | .title("Chapter 1"))?; 13 | 14 | epub.generate(&mut std::fs::File::create(output_file_path)?)?; 15 | info!("EPUB file created successfully at {}", output_file_path); 16 | Ok(()) 17 | } -------------------------------------------------------------------------------- /src/converter.rs: -------------------------------------------------------------------------------- 1 | // src/converter.rs 2 | use pulldown_cmark::{html, Options, Parser}; 3 | 4 | pub fn convert_markdown_to_html(input: &str) -> String { 5 | let options = Options::ENABLE_TABLES | Options::ENABLE_STRIKETHROUGH; 6 | let parser = Parser::new_ext(input, options); 7 | let mut html_output = String::new(); 8 | html::push_html(&mut html_output, parser); 9 | html_output 10 | } 11 | 12 | pub fn convert_file_to_html(file_path: &str) -> Result { 13 | if !std::path::Path::new(file_path).exists() { 14 | return Err(std::io::Error::new(std::io::ErrorKind::NotFound, "Input file not found")); 15 | } 16 | 17 | let markdown = std::fs::read_to_string(file_path)?; 18 | Ok(convert_markdown_to_html(&markdown)) 19 | } -------------------------------------------------------------------------------- /src/highlighting.rs: -------------------------------------------------------------------------------- 1 | // src/highlighting.rs 2 | use syntect::parsing::SyntaxSet; 3 | use syntect::highlighting::ThemeSet; 4 | use syntect::html::highlighted_html_for_string; 5 | 6 | pub fn apply_syntax_highlighting(html: &str) -> String { 7 | let syntax_set = SyntaxSet::load_defaults_newlines(); 8 | let theme_set = ThemeSet::load_defaults(); 9 | 10 | let theme = &theme_set.themes["base16-ocean.dark"]; 11 | let mut highlighted_html = String::new(); 12 | 13 | for line in html.lines() { 14 | if line.starts_with("
") && line.ends_with("
") { 15 | let code = &line[11..line.len() - 12]; 16 | let syntax = syntax_set.find_syntax_by_extension("rs").unwrap(); 17 | let highlighted = highlighted_html_for_string(code, &syntax_set, syntax, theme); 18 | highlighted_html.push_str(&format!("
{}
", highlighted)); 19 | } else { 20 | highlighted_html.push_str(line); 21 | } 22 | } 23 | 24 | highlighted_html 25 | } 26 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Arnav 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/cli.rs: -------------------------------------------------------------------------------- 1 | // src/cli.rs 2 | use clap::{App, Arg}; 3 | 4 | pub fn parse_args() -> clap::ArgMatches<'static> { 5 | App::new("Rust Markdown Converter") 6 | .version("1.4") 7 | .author("Arnav") 8 | .about("Converts Markdown to HTML") 9 | .arg(Arg::with_name("input") 10 | .help("Input markdown file") 11 | .required(true) 12 | .index(1)) 13 | .arg(Arg::with_name("output") 14 | .help("Output HTML file") 15 | .required(false) 16 | .index(2)) 17 | .arg(Arg::with_name("theme") 18 | .help("CSS theme for the output. Available: default, dark, light, solarized_dark, solarized_light, gruvbox_dark, gruvbox_light") 19 | .takes_value(true) 20 | .default_value("default")) 21 | .arg(Arg::with_name("clipboard") 22 | .help("Output the generated HTML directly to the clipboard") 23 | .short("c") 24 | .long("clipboard") 25 | .takes_value(false)) 26 | .arg(Arg::with_name("pdf") 27 | .help("Export the generated HTML to a PDF file") 28 | .short("p") 29 | .long("pdf") 30 | .takes_value(false)) 31 | .arg(Arg::with_name("browser") 32 | .help("Preview the generated HTML in the default web browser") 33 | .short("b") 34 | .long("browser") 35 | .takes_value(false)) 36 | .arg(Arg::with_name("css") 37 | .help("Path to an external CSS file to include in the output HTML") 38 | .takes_value(true) 39 | .long("css")) 40 | .arg(Arg::with_name("pdf_name") 41 | .help("Specify the output PDF file name") 42 | .takes_value(true) 43 | .short("n") 44 | .long("pdf-name")) 45 | .arg(Arg::with_name("epub") 46 | .help("Export the generated HTML to an EPUB file") 47 | .short("e") 48 | .long("epub") 49 | .takes_value(false)) 50 | .arg(Arg::with_name("verbose") 51 | .help("Enable verbose output") 52 | .short("v") 53 | .long("verbose") 54 | .takes_value(false)) 55 | .get_matches() 56 | } -------------------------------------------------------------------------------- /src/utils.rs: -------------------------------------------------------------------------------- 1 | // src/utils.rs 2 | use std::fs; 3 | use std::process::Command; 4 | use clipboard::{ClipboardProvider, ClipboardContext}; 5 | 6 | pub fn get_theme_css(theme: &str) -> &str { 7 | match theme { 8 | "dark" => "", 9 | "light" => "", 10 | "solarized_dark" => "", 11 | "solarized_light" => "", 12 | "gruvbox_dark" => "", 13 | "gruvbox_light" => "", 14 | "dracula" => "", 15 | "monokai" => "", 16 | "nord" => "", 17 | "zenburn" => "", 18 | "pookie" => "", 19 | _ => "", // default theme 20 | } 21 | } 22 | 23 | pub fn save_html_to_file(html: &str, output_file_path: &str) -> Result<(), std::io::Error> { 24 | fs::write(output_file_path, html) 25 | } 26 | 27 | pub fn copy_to_clipboard(html: &str) -> Result<(), Box> { 28 | let mut ctx: ClipboardContext = ClipboardProvider::new()?; 29 | ctx.set_contents(html.to_string())?; 30 | Ok(()) 31 | } 32 | 33 | pub fn export_html_to_pdf(_html: &str, output_pdf_path: &str) -> Result<(), Box> { 34 | let _ = _html; 35 | let output = Command::new("wkhtmltopdf") 36 | .arg("example.html") 37 | .arg(output_pdf_path) 38 | .output()?; 39 | 40 | if output.status.success() { 41 | println!("Successfully exported to PDF: {}", output_pdf_path); 42 | } else { 43 | eprintln!("Failed to export to PDF"); 44 | eprintln!("stdout: {}", String::from_utf8_lossy(&output.stdout)); 45 | eprintln!("stderr: {}", String::from_utf8_lossy(&output.stderr)); 46 | } 47 | 48 | Ok(()) 49 | } -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | // src/main.rs 2 | mod converter; 3 | mod highlighting; 4 | mod image; 5 | mod cli; 6 | mod epub; 7 | mod utils; 8 | 9 | 10 | use std::time::Instant; 11 | use std::path::Path; 12 | 13 | fn main() { 14 | let start_time = Instant::now(); 15 | 16 | let matches = cli::parse_args(); 17 | 18 | if let Err(e) = run(matches) { 19 | eprintln!("Application error: {}", e); 20 | } 21 | 22 | let duration = start_time.elapsed(); 23 | println!("Time elapsed: {:?}", duration); 24 | } 25 | 26 | fn run(matches: clap::ArgMatches) -> Result<(), Box> { 27 | let input_file_path = matches.value_of("input").expect("Failed to get input file path"); 28 | let theme = matches.value_of("theme").expect("Failed to get theme"); 29 | let use_clipboard = matches.is_present("clipboard"); 30 | let preview_in_browser = matches.is_present("browser"); 31 | let css_file_path = matches.value_of("css"); 32 | let output_file_path = matches.value_of("output"); 33 | 34 | let css = if let Some(path) = css_file_path { 35 | match std::fs::read_to_string(path) { 36 | Ok(contents) => contents, 37 | Err(err) => { 38 | eprintln!("Warning: Failed to read CSS file {}: {}", path, err); 39 | utils::get_theme_css(theme).to_string() 40 | } 41 | } 42 | } else { 43 | utils::get_theme_css(theme).to_string() 44 | }; 45 | 46 | let mut html = converter::convert_file_to_html(input_file_path)?; 47 | html.insert_str(0, &css); // Prepend the CSS to the HTML output 48 | 49 | let base_path = Path::new(input_file_path).parent().unwrap_or_else(|| Path::new(".")); 50 | image::embed_images_as_base64(&mut html, base_path, Some(85)); 51 | 52 | let author = "Author"; 53 | let title = "Sample"; 54 | 55 | // Apply syntax highlighting 56 | html = highlighting::apply_syntax_highlighting(&html); 57 | 58 | if use_clipboard { 59 | utils::copy_to_clipboard(&html)?; 60 | } 61 | 62 | if matches.is_present("epub") { 63 | let output_epub_path = "output.epub"; 64 | epub::convert_to_epub(&html, output_epub_path,author,title)?; 65 | } 66 | 67 | if matches.is_present("pdf") { 68 | utils::export_html_to_pdf(&html, "output.pdf")?; 69 | } 70 | 71 | if let Some(output_path) = output_file_path { 72 | utils::save_html_to_file(&html, output_path)?; 73 | println!("Conversion successful. HTML saved to {}", output_path); 74 | if preview_in_browser { 75 | if webbrowser::open(output_path).is_err() { 76 | eprintln!("Failed to open the HTML in the default browser."); 77 | } 78 | } 79 | } else if !use_clipboard { 80 | eprintln!("Please specify an output file or use the --clipboard or --browser option."); 81 | } 82 | 83 | Ok(()) 84 | } -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing to TextScribe 2 | 3 | Thank you for considering contributing to TextScribe! 4 | 5 | ## Table of Contents 6 | 7 | - [Contributing to TextScribe](#contributing-to-textscribe) 8 | - [Table of Contents](#table-of-contents) 9 | - [Code of Conduct](#code-of-conduct) 10 | - [Getting Started](#getting-started) 11 | - [For PR](#for-pr) 12 | - [Contributing Guidelines](#contributing-guidelines) 13 | - [Code Style](#code-style) 14 | - [Variable Names](#variable-names) 15 | - [Documentation](#documentation) 16 | - [Testing](#testing) 17 | - [Submitting a Pull Request](#submitting-a-pull-request) 18 | - [Spam and Invalid Contributions](#spam-and-invalid-contributions) 19 | - [Contact](#contact) 20 | 21 | ## Code of Conduct 22 | 23 | Before you start contributing, please read and adhere to our [Code of Conduct](CODE_OF_CONDUCT.md). We expect all contributors to follow these guidelines to maintain a respectful and welcoming community. 24 | 25 | ## Getting Started 26 | 27 | 1. Rmember to read [code of conduct](./code_of_conduct). 28 | 29 | ### For PR 30 | 31 | 1. Fork the repository to your own GitHub account. 32 | 2. Clone your forked repository to your local machine. 33 | 3. Create a new branch for your work with a proper well defined name. 34 | 4. Make your changes and commit them with meaningful commit messages. 35 | 5. Open [PRs](https://github.com/arncv/TextScribe/pulls) to development branch (Remember to [Squash](https://docs.github.com/en/desktop/managing-commits/squashing-commits-in-github-desktop) before making a pr). 36 | 6. If the PR is in relation to an issue/feature then it must be referenced within the PR. 37 | 38 | ## Contributing Guidelines 39 | 40 | ### Code Style 41 | 42 | - Follow consistent code style throughout the project. 43 | - Use indentation with 4 spaces. 44 | - Use clear and descriptive variable and function names. 45 | - Comment your code where necessary to explain complex logic. 46 | 47 | ### Variable Names 48 | 49 | - Use meaningful and descriptive variable names. 50 | - Avoid single-letter variable names unless they are for loop counters. 51 | 52 | ### Documentation 53 | 54 | - Ensure that your code is well-documented. 55 | - Include comments to explain the purpose and usage of functions and classes. 56 | - Update the [README.md](./README.md) file if your changes introduce new features or modify existing ones. 57 | 58 | ### Testing 59 | 60 | - Write test cases for the code you contribute. 61 | - Ensure that your code passes all existing tests. 62 | - If you add new functionality, add corresponding tests. 63 | 64 | ## Submitting a Pull Request 65 | 66 | 1. Push your changes to your forked repository. 67 | 2. Create a pull request from your forked repository to the development branch of this repository on GitHub. 68 | 3. Ensure that your pull request includes a clear description of the changes made and their purpose. 69 | 4. Our team will review your pull request and provide feedback or merge it if everything looks good. 70 | 71 | ## Spam and Invalid Contributions 72 | 73 | Spammy or invalid contributions will not be tolerated. We take the quality of our project seriously. If your contributions are identified as spam or invalid, they will be marked accordingly. Please ensure that your contributions align with our guidelines and benefit the project. 74 | 75 | ## Contact 76 | 77 | If you have any questions or need further assistance, feel free to reach out to us. 78 | -------------------------------------------------------------------------------- /src/image.rs: -------------------------------------------------------------------------------- 1 | use std::sync::{Arc, Mutex}; 2 | use std::fs; 3 | use std::path::Path; 4 | use base64; 5 | use image::{ImageOutputFormat, ImageFormat, io::Reader as ImageReader}; 6 | use anyhow::{Result, Context}; 7 | use log::{info, warn}; 8 | use rayon::prelude::*; 9 | 10 | pub fn optimize_image(img_path: &Path, quality: Option) -> Result<(Vec, ImageFormat)> { 11 | let img = image::open(img_path).context("Failed to open image")?; 12 | let mut optimized_img = Vec::new(); 13 | 14 | let format = ImageReader::open(img_path)?.format().unwrap_or(ImageFormat::Png); // Default to PNG if format detection fails 15 | 16 | match format { 17 | ImageFormat::Png => { 18 | img.write_to(&mut optimized_img, ImageOutputFormat::Png).context("Failed to write PNG image")?; 19 | }, 20 | ImageFormat::Jpeg => { 21 | let quality = quality.unwrap_or(80); // Default to quality 80 if not specified 22 | img.write_to(&mut optimized_img, ImageOutputFormat::Jpeg(quality)).context("Failed to write JPEG image")?; 23 | }, 24 | ImageFormat::Gif => { 25 | img.write_to(&mut optimized_img, ImageOutputFormat::Gif).context("Failed to write GIF image")?; 26 | }, 27 | ImageFormat::Bmp => { 28 | img.write_to(&mut optimized_img, ImageOutputFormat::Bmp).context("Failed to write BMP image")?; 29 | }, 30 | ImageFormat::Farbfeld => { 31 | img.write_to(&mut optimized_img, ImageOutputFormat::Farbfeld).context("Failed to write Farbfeld image")?; 32 | }, 33 | ImageFormat::Ico => { 34 | img.write_to(&mut optimized_img, ImageOutputFormat::Ico).context("Failed to write ICO image")?; 35 | }, 36 | _ => { 37 | img.write_to(&mut optimized_img, ImageOutputFormat::Png).context("Failed to write default PNG image")?; 38 | } 39 | } 40 | Ok((optimized_img, format)) 41 | } 42 | 43 | pub fn embed_images_as_base64( 44 | html_output: &mut String, 45 | base_path: &Path, 46 | quality: Option, 47 | ) { 48 | let img_tag_pattern = " = Vec::new(); 52 | 53 | while let Some(start) = html_output[index..].find(img_tag_pattern) { 54 | let start = start + index; 55 | let end = html_output[start..].find("\"").unwrap() + start + img_tag_pattern.len(); 56 | let img_path_str = &html_output[start + img_tag_pattern.len()..end]; 57 | let img_path = base_path.join(img_path_str); 58 | 59 | if fs::read(img_path.clone()).is_ok() { 60 | tasks.push((start, end, img_path.to_path_buf())); 61 | } 62 | 63 | index = end + 1; 64 | } 65 | 66 | let html_output_arc = Arc::new(Mutex::new(html_output.clone())); 67 | 68 | tasks.into_par_iter().for_each(|(start, end, img_path)| { 69 | match optimize_image(&img_path, quality) { 70 | Ok((optimized_data, img_format)) => { 71 | let encoded = base64::encode(&optimized_data); 72 | let prefix = get_data_url_prefix(img_format); 73 | let data_url = format!("{}{}", prefix, encoded); 74 | 75 | let mut html_output = html_output_arc.lock().expect("Failed to lock mutex"); 76 | html_output.replace_range((start + img_tag_pattern.len())..end, &data_url); 77 | info!("Embedded image {} as base64", img_path.display()); 78 | }, 79 | Err(e) => { 80 | warn!("Failed to optimize image {}: {}", img_path.display(), e); 81 | } 82 | } 83 | }); 84 | 85 | let final_html_output = Arc::try_unwrap(html_output_arc).expect("Failed to unwrap Arc").into_inner().expect("Failed to get inner value from Mutex"); 86 | *html_output = final_html_output; 87 | } 88 | 89 | fn get_data_url_prefix(format: ImageFormat) -> &'static str { 90 | match format { 91 | ImageFormat::Png => "data:image/png;base64,", 92 | ImageFormat::Jpeg => "data:image/jpeg;base64,", 93 | ImageFormat::Gif => "data:image/gif;base64,", 94 | ImageFormat::Bmp => "data:image/bmp;base64,", 95 | ImageFormat::Farbfeld => "data:image/ff;base64,", 96 | ImageFormat::Ico => "data:image/ico;base64", 97 | _ => "data:image/png;base64,", // default to PNG 98 | } 99 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | TextScribe - Markdown Converter 2 | ========================== 3 | 4 | ![logo](https://i.imgur.com/FU0mh9C.png) 5 | 6 | The Markdown Converter is a robust command-line utility built with Rust. It's designed to transform Markdown files into HTML, EPUB & PDF format effortlessly. With the power of the 'pulldown-cmark' crate, it ensures accurate parsing and rendering of Markdown content. 7 | 8 | ## Table of Contents 9 | 10 | - [🌟 Features](#🌟-features) 11 | - [🚀 Installation](#🚀-installation) 12 | - [🛠 Usage](#🛠-usage) 13 | - [Example](example) 14 | - [🎨 Options](#🎨-options) 15 | - [🚧 Future Roadmap](#🚧-future-roadmap) 16 | - [🤝 Contributing](#🤝-contributing) 17 | - [📜 License](#📜-license) 18 | 19 | 🌟 Features 20 | ----------- 21 | 22 | * **Swift Conversion**: Instantly convert your Markdown files into HTML, PDF & EPUB. 23 | 24 | * **Intuitive Interface**: A user-friendly command-line interface powered by the `clap` crate. 25 | 26 | * **Rich Markdown Support**: Supports a wide range of Markdown syntax, including headings, paragraphs, lists, emphasis, links, images (with Base64 embedding), and code blocks. 27 | 28 | * [**Customization Options**](#🎨-options): Choose specific Markdown features like tables and strikethrough using the `pulldown-cmark` Options. 29 | 30 | * **Flexible Output**: Save the generated HTML or EPUB to a specified location, copy it directly to the clipboard, or preview it in your default web browser. 31 | 32 | * **Theming**: Style your HTML output with different themes. 33 | 34 | 🚀 Installation 35 | --------------- 36 | 37 | 1. **Setup Rust Environment**: If you haven't installed Rust and Cargo, get them from [Rust's official website](https://www.rust-lang.org/). 38 | 2. **Clone the Repository**: 39 | 40 | ```console 41 | git clone https://github.com/arncv/TextScribe.git 42 | ``` 43 | 44 | 3. **Navigate to the Project Directory**: 45 | 46 | ```console 47 | cd TextScribe 48 | ``` 49 | 50 | 4. **Compile the Project**: 51 | 52 | ```console 53 | cargo build --release 54 | ``` 55 | 56 | 🛠 Usage 57 | -------- 58 | 59 | To convert your Markdown to HTML or EPUB, use the following command: 60 | 61 | ```console 62 | cargo run --release -- -i [-o ] [--theme ] [--clipboard] [--browser] [--epub] 63 | ``` 64 | 65 | * ``: Path to your Markdown file. 66 | * ``: (Optional) Path for the HTML output. If not provided and neither clipboard nor browser options are used, an error will be prompted. 67 | * `--theme `: Choose a theme (options: default, dark, light). 68 | * `--clipboard`: Copy the generated HTML directly to the clipboard. 69 | * `--browser`: Preview the generated HTML in your default web browser. 70 | * `--epub`: Generate an EPUB file. Perfect for readers. 71 | 72 | ### **Example:** 73 | 74 | Convert `example.md` to HTML using the dark theme and save it as `output.html`: 75 | 76 | ```console 77 | cargo run --release -- -i example.md -o output.html --theme dark 78 | ``` 79 | 80 | To copy the output directly to the clipboard: 81 | 82 | ```console 83 | cargo run --release -- -i example.md --clipboard 84 | ``` 85 | 86 | To preview the output in your default web browser: 87 | 88 | ```console 89 | cargo run --release -- -i example.md --browser 90 | ``` 91 | 92 | Convert `example.md` to EPUB using the dark theme and save it as `output.epub`: 93 | 94 | ```console 95 | cargo run --release -- -i example.md -o output.epub --theme dark --epub 96 | ``` 97 | 98 | 🎨 Options 99 | ---------- 100 | 101 | * **Theming**: Style your HTML output. 102 | 103 | ```console 104 | cargo run --release -- -i -o --theme 105 | ``` 106 | 107 | * **Tables**: Enable table formatting in your Markdown. 108 | 109 | ```console 110 | cargo run --release -- -i -o --tables 111 | ``` 112 | 113 | * **Strikethrough**: Enable strikethrough formatting. 114 | 115 | ```console 116 | cargo run --release -- -i -o --strikethrough 117 | ``` 118 | 119 | * **Clipboard Output**: Copy the generated HTML to the clipboard. 120 | 121 | ```console 122 | cargo run --release -- -i --clipboard 123 | ``` 124 | 125 | * **Browser Preview**: View the generated HTML in your default web browser. 126 | 127 | ```console 128 | cargo run --release -- -i --browser 129 | ``` 130 | 131 | 🚧 Future Roadmap 132 | ----------------- 133 | 134 | * ✅ **Support more image types**: Support for more image types ; GIFs, PNG, JPEG. 135 | * ✅ **Improved Error Handling**: Improved functionality & logging for errors. 136 | * ✅ **PDF Conversion**: Integrate functionality to convert the generated HTML into PDF format. 137 | * - [ ] **Extended Theming**: Introduce more themes and customization options for the HTML output. 138 | * - [ ] **Interactive GUI**: Develop a graphical user interface for users who prefer GUI over CLI. 139 | * - [ ] **Enhanced Image Support**: Improve image embedding with options for resizing, alignment, and captions. 140 | 141 | We're always open to suggestions and feedback. If you have an idea that's not listed here, please share it with us! 142 | 143 | 🤝 Contributing 144 | --------------- 145 | 146 | Contributions are always welcome! Whether it's a feature request, bug fix, or a new idea, feel free to submit a pull request or open an issue. Let's enhance this tool together! 147 | Be sure to read [CONTRIBUTING](CONTRIBUTING.md) file to know about more contributions details. 148 | 149 | 📜 License 150 | ---------- 151 | 152 | This project is licensed under the [MIT License](LICENSE). 153 | -------------------------------------------------------------------------------- /output.epub: -------------------------------------------------------------------------------- 1 |

TextScribe - Markdown Converter

logo

The Markdown Converter is a robust command-line utility built with Rust. It's designed to transform Markdown files into HTML, EPUB & PDF format effortlessly. With the power of the 'pulldown-cmark' crate, it ensures accurate parsing and rendering of Markdown content.

Table of Contents

🌟 Features

  • Swift Conversion: Instantly convert your Markdown files into HTML, PDF & EPUB.

  • Intuitive Interface: A user-friendly command-line interface powered by the clap crate.

  • Rich Markdown Support: Supports a wide range of Markdown syntax, including headings, paragraphs, lists, emphasis, links, images (with Base64 embedding), and code blocks.

  • Customization Options: Choose specific Markdown features like tables and strikethrough using the pulldown-cmark Options.

  • Flexible Output: Save the generated HTML or EPUB to a specified location, copy it directly to the clipboard, or preview it in your default web browser.

  • Theming: Style your HTML output with different themes.

🚀 Installation

  1. Setup Rust Environment: If you haven't installed Rust and Cargo, get them from Rust's official website.

  2. Clone the Repository:

    git clone https://github.com/arncv/TextScribe.git
  3. Navigate to the Project Directory:

    cd TextScribe
  4. Compile the Project:

    cargo build --release

🛠 Usage

To convert your Markdown to HTML or EPUB, use the following command:

cargo run --release -- -i <input-file> [-o <output-file>] [--theme <theme-name>] [--clipboard] [--browser] [--epub]
  • <input-file>: Path to your Markdown file.
  • <output-file>: (Optional) Path for the HTML output. If not provided and neither clipboard nor browser options are used, an error will be prompted.
  • --theme <theme-name>: Choose a theme (options: default, dark, light).
  • --clipboard: Copy the generated HTML directly to the clipboard.
  • --browser: Preview the generated HTML in your default web browser.
  • --epub: Generate an EPUB file. Perfect for readers.

Example:

Convert example.md to HTML using the dark theme and save it as output.html:

cargo run --release -- -i example.md -o output.html --theme dark

To copy the output directly to the clipboard:

cargo run --release -- -i example.md --clipboard

To preview the output in your default web browser:

cargo run --release -- -i example.md --browser

Convert example.md to EPUB using the dark theme and save it as output.epub:

cargo run --release -- -i example.md -o output.epub --theme dark --epub

🎨 Options

  • Theming: Style your HTML output.

    cargo run --release -- -i <input-file> -o <output-file> --theme <theme-name>
  • Tables: Enable table formatting in your Markdown.

    cargo run --release -- -i <input-file> -o <output-file> --tables
  • Strikethrough: Enable strikethrough formatting.

    cargo run --release -- -i <input-file> -o <output-file> --strikethrough
  • Clipboard Output: Copy the generated HTML to the clipboard.

    cargo run --release -- -i <input-file> --clipboard
  • Browser Preview: View the generated HTML in your default web browser.

    cargo run --release -- -i <input-file> --browser

🚧 Future Roadmap

  • Support more image types: Support for more image types ; GIFs, PNG, JPEG.
  • Improved Error Handling: Improved functionality & logging for errors.
  • PDF Conversion: Integrate functionality to convert the generated HTML into PDF format.
    • [ ] Extended Theming: Introduce more themes and customization options for the HTML output.
    • [ ] Interactive GUI: Develop a graphical user interface for users who prefer GUI over CLI.
    • [ ] Enhanced Image Support: Improve image embedding with options for resizing, alignment, and captions.

We're always open to suggestions and feedback. If you have an idea that's not listed here, please share it with us!

🤝 Contributing

Contributions are always welcome! Whether it's a feature request, bug fix, or a new idea, feel free to submit a pull request or open an issue. Let's enhance this tool together!Be sure to read CONTRIBUTING file to know about more contributions details.

📜 License

This project is licensed under the MIT License.

-------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "addr2line" 7 | version = "0.22.0" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" 10 | dependencies = [ 11 | "gimli", 12 | ] 13 | 14 | [[package]] 15 | name = "adler" 16 | version = "1.0.2" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" 19 | 20 | [[package]] 21 | name = "adler32" 22 | version = "1.2.0" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" 25 | 26 | [[package]] 27 | name = "aho-corasick" 28 | version = "1.1.3" 29 | source = "registry+https://github.com/rust-lang/crates.io-index" 30 | checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" 31 | dependencies = [ 32 | "memchr", 33 | ] 34 | 35 | [[package]] 36 | name = "android-tzdata" 37 | version = "0.1.1" 38 | source = "registry+https://github.com/rust-lang/crates.io-index" 39 | checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" 40 | 41 | [[package]] 42 | name = "android_system_properties" 43 | version = "0.1.5" 44 | source = "registry+https://github.com/rust-lang/crates.io-index" 45 | checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 46 | dependencies = [ 47 | "libc", 48 | ] 49 | 50 | [[package]] 51 | name = "ansi_term" 52 | version = "0.12.1" 53 | source = "registry+https://github.com/rust-lang/crates.io-index" 54 | checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" 55 | dependencies = [ 56 | "winapi", 57 | ] 58 | 59 | [[package]] 60 | name = "anyhow" 61 | version = "1.0.86" 62 | source = "registry+https://github.com/rust-lang/crates.io-index" 63 | checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" 64 | 65 | [[package]] 66 | name = "approx" 67 | version = "0.1.1" 68 | source = "registry+https://github.com/rust-lang/crates.io-index" 69 | checksum = "08abcc3b4e9339e33a3d0a5ed15d84a687350c05689d825e0f6655eef9e76a94" 70 | 71 | [[package]] 72 | name = "arc" 73 | version = "0.0.1" 74 | source = "registry+https://github.com/rust-lang/crates.io-index" 75 | checksum = "4543528550ff5d3fa676742778c61387b2b6db24ab72628ff951a5b1b0f470fe" 76 | dependencies = [ 77 | "cocoa", 78 | "failure", 79 | "lazy_static", 80 | "objc", 81 | "palette", 82 | ] 83 | 84 | [[package]] 85 | name = "atty" 86 | version = "0.2.14" 87 | source = "registry+https://github.com/rust-lang/crates.io-index" 88 | checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" 89 | dependencies = [ 90 | "hermit-abi", 91 | "libc", 92 | "winapi", 93 | ] 94 | 95 | [[package]] 96 | name = "autocfg" 97 | version = "0.1.8" 98 | source = "registry+https://github.com/rust-lang/crates.io-index" 99 | checksum = "0dde43e75fd43e8a1bf86103336bc699aa8d17ad1be60c76c0bdfd4828e19b78" 100 | dependencies = [ 101 | "autocfg 1.3.0", 102 | ] 103 | 104 | [[package]] 105 | name = "autocfg" 106 | version = "1.3.0" 107 | source = "registry+https://github.com/rust-lang/crates.io-index" 108 | checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" 109 | 110 | [[package]] 111 | name = "backtrace" 112 | version = "0.3.73" 113 | source = "registry+https://github.com/rust-lang/crates.io-index" 114 | checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" 115 | dependencies = [ 116 | "addr2line", 117 | "cc", 118 | "cfg-if", 119 | "libc", 120 | "miniz_oxide 0.7.4", 121 | "object", 122 | "rustc-demangle", 123 | ] 124 | 125 | [[package]] 126 | name = "base64" 127 | version = "0.13.1" 128 | source = "registry+https://github.com/rust-lang/crates.io-index" 129 | checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" 130 | 131 | [[package]] 132 | name = "base64" 133 | version = "0.21.7" 134 | source = "registry+https://github.com/rust-lang/crates.io-index" 135 | checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" 136 | 137 | [[package]] 138 | name = "bincode" 139 | version = "1.3.3" 140 | source = "registry+https://github.com/rust-lang/crates.io-index" 141 | checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" 142 | dependencies = [ 143 | "serde", 144 | ] 145 | 146 | [[package]] 147 | name = "bitflags" 148 | version = "1.3.2" 149 | source = "registry+https://github.com/rust-lang/crates.io-index" 150 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 151 | 152 | [[package]] 153 | name = "bitflags" 154 | version = "2.5.0" 155 | source = "registry+https://github.com/rust-lang/crates.io-index" 156 | checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" 157 | 158 | [[package]] 159 | name = "block" 160 | version = "0.1.6" 161 | source = "registry+https://github.com/rust-lang/crates.io-index" 162 | checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" 163 | 164 | [[package]] 165 | name = "bumpalo" 166 | version = "3.16.0" 167 | source = "registry+https://github.com/rust-lang/crates.io-index" 168 | checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" 169 | 170 | [[package]] 171 | name = "bytemuck" 172 | version = "1.16.1" 173 | source = "registry+https://github.com/rust-lang/crates.io-index" 174 | checksum = "b236fc92302c97ed75b38da1f4917b5cdda4984745740f153a5d3059e48d725e" 175 | 176 | [[package]] 177 | name = "byteorder" 178 | version = "1.5.0" 179 | source = "registry+https://github.com/rust-lang/crates.io-index" 180 | checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 181 | 182 | [[package]] 183 | name = "bytes" 184 | version = "1.6.0" 185 | source = "registry+https://github.com/rust-lang/crates.io-index" 186 | checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" 187 | 188 | [[package]] 189 | name = "cc" 190 | version = "1.0.99" 191 | source = "registry+https://github.com/rust-lang/crates.io-index" 192 | checksum = "96c51067fd44124faa7f870b4b1c969379ad32b2ba805aa959430ceaa384f695" 193 | 194 | [[package]] 195 | name = "cesu8" 196 | version = "1.1.0" 197 | source = "registry+https://github.com/rust-lang/crates.io-index" 198 | checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" 199 | 200 | [[package]] 201 | name = "cfg-if" 202 | version = "1.0.0" 203 | source = "registry+https://github.com/rust-lang/crates.io-index" 204 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 205 | 206 | [[package]] 207 | name = "chrono" 208 | version = "0.4.38" 209 | source = "registry+https://github.com/rust-lang/crates.io-index" 210 | checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" 211 | dependencies = [ 212 | "android-tzdata", 213 | "iana-time-zone", 214 | "js-sys", 215 | "num-traits", 216 | "wasm-bindgen", 217 | "windows-targets 0.52.5", 218 | ] 219 | 220 | [[package]] 221 | name = "clap" 222 | version = "2.34.0" 223 | source = "registry+https://github.com/rust-lang/crates.io-index" 224 | checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" 225 | dependencies = [ 226 | "ansi_term", 227 | "atty", 228 | "bitflags 1.3.2", 229 | "strsim", 230 | "textwrap", 231 | "unicode-width", 232 | "vec_map", 233 | ] 234 | 235 | [[package]] 236 | name = "clipboard" 237 | version = "0.5.0" 238 | source = "registry+https://github.com/rust-lang/crates.io-index" 239 | checksum = "25a904646c0340239dcf7c51677b33928bf24fdf424b79a57909c0109075b2e7" 240 | dependencies = [ 241 | "clipboard-win", 242 | "objc", 243 | "objc-foundation", 244 | "objc_id", 245 | "x11-clipboard", 246 | ] 247 | 248 | [[package]] 249 | name = "clipboard-win" 250 | version = "2.2.0" 251 | source = "registry+https://github.com/rust-lang/crates.io-index" 252 | checksum = "e3a093d6fed558e5fe24c3dfc85a68bb68f1c824f440d3ba5aca189e2998786b" 253 | dependencies = [ 254 | "winapi", 255 | ] 256 | 257 | [[package]] 258 | name = "cloudabi" 259 | version = "0.0.3" 260 | source = "registry+https://github.com/rust-lang/crates.io-index" 261 | checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" 262 | dependencies = [ 263 | "bitflags 1.3.2", 264 | ] 265 | 266 | [[package]] 267 | name = "cocoa" 268 | version = "0.15.0" 269 | source = "registry+https://github.com/rust-lang/crates.io-index" 270 | checksum = "7b44bd25bd275e9d74a5dff8ca55f2fb66c9ad5e12170d58697701df21a56e0e" 271 | dependencies = [ 272 | "bitflags 1.3.2", 273 | "block", 274 | "core-graphics", 275 | "libc", 276 | "objc", 277 | ] 278 | 279 | [[package]] 280 | name = "color_quant" 281 | version = "1.1.0" 282 | source = "registry+https://github.com/rust-lang/crates.io-index" 283 | checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" 284 | 285 | [[package]] 286 | name = "combine" 287 | version = "4.6.7" 288 | source = "registry+https://github.com/rust-lang/crates.io-index" 289 | checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" 290 | dependencies = [ 291 | "bytes", 292 | "memchr", 293 | ] 294 | 295 | [[package]] 296 | name = "core-foundation" 297 | version = "0.6.4" 298 | source = "registry+https://github.com/rust-lang/crates.io-index" 299 | checksum = "25b9e03f145fd4f2bf705e07b900cd41fc636598fe5dc452fd0db1441c3f496d" 300 | dependencies = [ 301 | "core-foundation-sys 0.6.2", 302 | "libc", 303 | ] 304 | 305 | [[package]] 306 | name = "core-foundation" 307 | version = "0.9.4" 308 | source = "registry+https://github.com/rust-lang/crates.io-index" 309 | checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" 310 | dependencies = [ 311 | "core-foundation-sys 0.8.6", 312 | "libc", 313 | ] 314 | 315 | [[package]] 316 | name = "core-foundation-sys" 317 | version = "0.6.2" 318 | source = "registry+https://github.com/rust-lang/crates.io-index" 319 | checksum = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b" 320 | 321 | [[package]] 322 | name = "core-foundation-sys" 323 | version = "0.8.6" 324 | source = "registry+https://github.com/rust-lang/crates.io-index" 325 | checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" 326 | 327 | [[package]] 328 | name = "core-graphics" 329 | version = "0.14.0" 330 | source = "registry+https://github.com/rust-lang/crates.io-index" 331 | checksum = "e54c4ab33705fa1fc8af375bb7929d68e1c1546c1ecef408966d8c3e49a1d84a" 332 | dependencies = [ 333 | "bitflags 1.3.2", 334 | "core-foundation 0.6.4", 335 | "foreign-types", 336 | "libc", 337 | ] 338 | 339 | [[package]] 340 | name = "crc32fast" 341 | version = "1.4.2" 342 | source = "registry+https://github.com/rust-lang/crates.io-index" 343 | checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" 344 | dependencies = [ 345 | "cfg-if", 346 | ] 347 | 348 | [[package]] 349 | name = "crossbeam-deque" 350 | version = "0.8.5" 351 | source = "registry+https://github.com/rust-lang/crates.io-index" 352 | checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" 353 | dependencies = [ 354 | "crossbeam-epoch", 355 | "crossbeam-utils", 356 | ] 357 | 358 | [[package]] 359 | name = "crossbeam-epoch" 360 | version = "0.9.18" 361 | source = "registry+https://github.com/rust-lang/crates.io-index" 362 | checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" 363 | dependencies = [ 364 | "crossbeam-utils", 365 | ] 366 | 367 | [[package]] 368 | name = "crossbeam-utils" 369 | version = "0.8.20" 370 | source = "registry+https://github.com/rust-lang/crates.io-index" 371 | checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" 372 | 373 | [[package]] 374 | name = "deflate" 375 | version = "0.8.6" 376 | source = "registry+https://github.com/rust-lang/crates.io-index" 377 | checksum = "73770f8e1fe7d64df17ca66ad28994a0a623ea497fa69486e14984e715c5d174" 378 | dependencies = [ 379 | "adler32", 380 | "byteorder", 381 | ] 382 | 383 | [[package]] 384 | name = "deranged" 385 | version = "0.3.11" 386 | source = "registry+https://github.com/rust-lang/crates.io-index" 387 | checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" 388 | dependencies = [ 389 | "powerfmt", 390 | ] 391 | 392 | [[package]] 393 | name = "either" 394 | version = "1.12.0" 395 | source = "registry+https://github.com/rust-lang/crates.io-index" 396 | checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" 397 | 398 | [[package]] 399 | name = "env_logger" 400 | version = "0.9.3" 401 | source = "registry+https://github.com/rust-lang/crates.io-index" 402 | checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" 403 | dependencies = [ 404 | "atty", 405 | "humantime", 406 | "log 0.4.21", 407 | "regex", 408 | "termcolor", 409 | ] 410 | 411 | [[package]] 412 | name = "epub-builder" 413 | version = "0.6.0" 414 | source = "registry+https://github.com/rust-lang/crates.io-index" 415 | checksum = "8f8b607f95b941c07a724ccd9264cce99632911d5cf96ec76bb56976485c1d9c" 416 | dependencies = [ 417 | "chrono", 418 | "eyre", 419 | "html-escape", 420 | "log 0.4.21", 421 | "mustache", 422 | "once_cell", 423 | "tempdir", 424 | "uuid", 425 | "zip", 426 | ] 427 | 428 | [[package]] 429 | name = "equivalent" 430 | version = "1.0.1" 431 | source = "registry+https://github.com/rust-lang/crates.io-index" 432 | checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" 433 | 434 | [[package]] 435 | name = "eyre" 436 | version = "0.6.12" 437 | source = "registry+https://github.com/rust-lang/crates.io-index" 438 | checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" 439 | dependencies = [ 440 | "indenter", 441 | "once_cell", 442 | ] 443 | 444 | [[package]] 445 | name = "failure" 446 | version = "0.1.8" 447 | source = "registry+https://github.com/rust-lang/crates.io-index" 448 | checksum = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86" 449 | dependencies = [ 450 | "backtrace", 451 | "failure_derive", 452 | ] 453 | 454 | [[package]] 455 | name = "failure_derive" 456 | version = "0.1.8" 457 | source = "registry+https://github.com/rust-lang/crates.io-index" 458 | checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4" 459 | dependencies = [ 460 | "proc-macro2", 461 | "quote", 462 | "syn 1.0.109", 463 | "synstructure", 464 | ] 465 | 466 | [[package]] 467 | name = "flate2" 468 | version = "1.0.30" 469 | source = "registry+https://github.com/rust-lang/crates.io-index" 470 | checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" 471 | dependencies = [ 472 | "crc32fast", 473 | "miniz_oxide 0.7.4", 474 | ] 475 | 476 | [[package]] 477 | name = "fnv" 478 | version = "1.0.7" 479 | source = "registry+https://github.com/rust-lang/crates.io-index" 480 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 481 | 482 | [[package]] 483 | name = "foreign-types" 484 | version = "0.3.2" 485 | source = "registry+https://github.com/rust-lang/crates.io-index" 486 | checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 487 | dependencies = [ 488 | "foreign-types-shared", 489 | ] 490 | 491 | [[package]] 492 | name = "foreign-types-shared" 493 | version = "0.1.1" 494 | source = "registry+https://github.com/rust-lang/crates.io-index" 495 | checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 496 | 497 | [[package]] 498 | name = "form_urlencoded" 499 | version = "1.2.1" 500 | source = "registry+https://github.com/rust-lang/crates.io-index" 501 | checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 502 | dependencies = [ 503 | "percent-encoding", 504 | ] 505 | 506 | [[package]] 507 | name = "fuchsia-cprng" 508 | version = "0.1.1" 509 | source = "registry+https://github.com/rust-lang/crates.io-index" 510 | checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" 511 | 512 | [[package]] 513 | name = "getopts" 514 | version = "0.2.21" 515 | source = "registry+https://github.com/rust-lang/crates.io-index" 516 | checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5" 517 | dependencies = [ 518 | "unicode-width", 519 | ] 520 | 521 | [[package]] 522 | name = "getrandom" 523 | version = "0.2.15" 524 | source = "registry+https://github.com/rust-lang/crates.io-index" 525 | checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" 526 | dependencies = [ 527 | "cfg-if", 528 | "libc", 529 | "wasi", 530 | ] 531 | 532 | [[package]] 533 | name = "gif" 534 | version = "0.11.4" 535 | source = "registry+https://github.com/rust-lang/crates.io-index" 536 | checksum = "3edd93c6756b4dfaf2709eafcc345ba2636565295c198a9cfbf75fa5e3e00b06" 537 | dependencies = [ 538 | "color_quant", 539 | "weezl", 540 | ] 541 | 542 | [[package]] 543 | name = "gimli" 544 | version = "0.29.0" 545 | source = "registry+https://github.com/rust-lang/crates.io-index" 546 | checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" 547 | 548 | [[package]] 549 | name = "hashbrown" 550 | version = "0.14.5" 551 | source = "registry+https://github.com/rust-lang/crates.io-index" 552 | checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" 553 | 554 | [[package]] 555 | name = "hermit-abi" 556 | version = "0.1.19" 557 | source = "registry+https://github.com/rust-lang/crates.io-index" 558 | checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" 559 | dependencies = [ 560 | "libc", 561 | ] 562 | 563 | [[package]] 564 | name = "home" 565 | version = "0.5.9" 566 | source = "registry+https://github.com/rust-lang/crates.io-index" 567 | checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" 568 | dependencies = [ 569 | "windows-sys 0.52.0", 570 | ] 571 | 572 | [[package]] 573 | name = "html-escape" 574 | version = "0.2.13" 575 | source = "registry+https://github.com/rust-lang/crates.io-index" 576 | checksum = "6d1ad449764d627e22bfd7cd5e8868264fc9236e07c752972b4080cd351cb476" 577 | dependencies = [ 578 | "utf8-width", 579 | ] 580 | 581 | [[package]] 582 | name = "humantime" 583 | version = "2.1.0" 584 | source = "registry+https://github.com/rust-lang/crates.io-index" 585 | checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" 586 | 587 | [[package]] 588 | name = "iana-time-zone" 589 | version = "0.1.60" 590 | source = "registry+https://github.com/rust-lang/crates.io-index" 591 | checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" 592 | dependencies = [ 593 | "android_system_properties", 594 | "core-foundation-sys 0.8.6", 595 | "iana-time-zone-haiku", 596 | "js-sys", 597 | "wasm-bindgen", 598 | "windows-core", 599 | ] 600 | 601 | [[package]] 602 | name = "iana-time-zone-haiku" 603 | version = "0.1.2" 604 | source = "registry+https://github.com/rust-lang/crates.io-index" 605 | checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" 606 | dependencies = [ 607 | "cc", 608 | ] 609 | 610 | [[package]] 611 | name = "idna" 612 | version = "0.5.0" 613 | source = "registry+https://github.com/rust-lang/crates.io-index" 614 | checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" 615 | dependencies = [ 616 | "unicode-bidi", 617 | "unicode-normalization", 618 | ] 619 | 620 | [[package]] 621 | name = "image" 622 | version = "0.23.14" 623 | source = "registry+https://github.com/rust-lang/crates.io-index" 624 | checksum = "24ffcb7e7244a9bf19d35bf2883b9c080c4ced3c07a9895572178cdb8f13f6a1" 625 | dependencies = [ 626 | "bytemuck", 627 | "byteorder", 628 | "color_quant", 629 | "gif", 630 | "jpeg-decoder", 631 | "num-iter", 632 | "num-rational", 633 | "num-traits", 634 | "png", 635 | "scoped_threadpool", 636 | "tiff", 637 | ] 638 | 639 | [[package]] 640 | name = "indenter" 641 | version = "0.3.3" 642 | source = "registry+https://github.com/rust-lang/crates.io-index" 643 | checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" 644 | 645 | [[package]] 646 | name = "indexmap" 647 | version = "2.2.6" 648 | source = "registry+https://github.com/rust-lang/crates.io-index" 649 | checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" 650 | dependencies = [ 651 | "equivalent", 652 | "hashbrown", 653 | ] 654 | 655 | [[package]] 656 | name = "itoa" 657 | version = "1.0.11" 658 | source = "registry+https://github.com/rust-lang/crates.io-index" 659 | checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" 660 | 661 | [[package]] 662 | name = "jni" 663 | version = "0.21.1" 664 | source = "registry+https://github.com/rust-lang/crates.io-index" 665 | checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" 666 | dependencies = [ 667 | "cesu8", 668 | "cfg-if", 669 | "combine", 670 | "jni-sys", 671 | "log 0.4.21", 672 | "thiserror", 673 | "walkdir", 674 | "windows-sys 0.45.0", 675 | ] 676 | 677 | [[package]] 678 | name = "jni-sys" 679 | version = "0.3.0" 680 | source = "registry+https://github.com/rust-lang/crates.io-index" 681 | checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" 682 | 683 | [[package]] 684 | name = "jpeg-decoder" 685 | version = "0.1.22" 686 | source = "registry+https://github.com/rust-lang/crates.io-index" 687 | checksum = "229d53d58899083193af11e15917b5640cd40b29ff475a1fe4ef725deb02d0f2" 688 | dependencies = [ 689 | "rayon", 690 | ] 691 | 692 | [[package]] 693 | name = "js-sys" 694 | version = "0.3.69" 695 | source = "registry+https://github.com/rust-lang/crates.io-index" 696 | checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" 697 | dependencies = [ 698 | "wasm-bindgen", 699 | ] 700 | 701 | [[package]] 702 | name = "lazy_static" 703 | version = "1.4.0" 704 | source = "registry+https://github.com/rust-lang/crates.io-index" 705 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 706 | 707 | [[package]] 708 | name = "lazycell" 709 | version = "1.3.0" 710 | source = "registry+https://github.com/rust-lang/crates.io-index" 711 | checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" 712 | 713 | [[package]] 714 | name = "libc" 715 | version = "0.2.155" 716 | source = "registry+https://github.com/rust-lang/crates.io-index" 717 | checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" 718 | 719 | [[package]] 720 | name = "line-wrap" 721 | version = "0.2.0" 722 | source = "registry+https://github.com/rust-lang/crates.io-index" 723 | checksum = "dd1bc4d24ad230d21fb898d1116b1801d7adfc449d42026475862ab48b11e70e" 724 | 725 | [[package]] 726 | name = "linked-hash-map" 727 | version = "0.5.6" 728 | source = "registry+https://github.com/rust-lang/crates.io-index" 729 | checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" 730 | 731 | [[package]] 732 | name = "log" 733 | version = "0.3.9" 734 | source = "registry+https://github.com/rust-lang/crates.io-index" 735 | checksum = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" 736 | dependencies = [ 737 | "log 0.4.21", 738 | ] 739 | 740 | [[package]] 741 | name = "log" 742 | version = "0.4.21" 743 | source = "registry+https://github.com/rust-lang/crates.io-index" 744 | checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" 745 | 746 | [[package]] 747 | name = "malloc_buf" 748 | version = "0.0.6" 749 | source = "registry+https://github.com/rust-lang/crates.io-index" 750 | checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" 751 | dependencies = [ 752 | "libc", 753 | ] 754 | 755 | [[package]] 756 | name = "memchr" 757 | version = "2.7.4" 758 | source = "registry+https://github.com/rust-lang/crates.io-index" 759 | checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" 760 | 761 | [[package]] 762 | name = "miniz_oxide" 763 | version = "0.3.7" 764 | source = "registry+https://github.com/rust-lang/crates.io-index" 765 | checksum = "791daaae1ed6889560f8c4359194f56648355540573244a5448a83ba1ecc7435" 766 | dependencies = [ 767 | "adler32", 768 | ] 769 | 770 | [[package]] 771 | name = "miniz_oxide" 772 | version = "0.4.4" 773 | source = "registry+https://github.com/rust-lang/crates.io-index" 774 | checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" 775 | dependencies = [ 776 | "adler", 777 | "autocfg 1.3.0", 778 | ] 779 | 780 | [[package]] 781 | name = "miniz_oxide" 782 | version = "0.7.4" 783 | source = "registry+https://github.com/rust-lang/crates.io-index" 784 | checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" 785 | dependencies = [ 786 | "adler", 787 | ] 788 | 789 | [[package]] 790 | name = "mustache" 791 | version = "0.9.0" 792 | source = "registry+https://github.com/rust-lang/crates.io-index" 793 | checksum = "51956ef1c5d20a1384524d91e616fb44dfc7d8f249bf696d49c97dd3289ecab5" 794 | dependencies = [ 795 | "log 0.3.9", 796 | "serde", 797 | ] 798 | 799 | [[package]] 800 | name = "ndk-context" 801 | version = "0.1.1" 802 | source = "registry+https://github.com/rust-lang/crates.io-index" 803 | checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" 804 | 805 | [[package]] 806 | name = "num-conv" 807 | version = "0.1.0" 808 | source = "registry+https://github.com/rust-lang/crates.io-index" 809 | checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" 810 | 811 | [[package]] 812 | name = "num-integer" 813 | version = "0.1.46" 814 | source = "registry+https://github.com/rust-lang/crates.io-index" 815 | checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" 816 | dependencies = [ 817 | "num-traits", 818 | ] 819 | 820 | [[package]] 821 | name = "num-iter" 822 | version = "0.1.45" 823 | source = "registry+https://github.com/rust-lang/crates.io-index" 824 | checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" 825 | dependencies = [ 826 | "autocfg 1.3.0", 827 | "num-integer", 828 | "num-traits", 829 | ] 830 | 831 | [[package]] 832 | name = "num-rational" 833 | version = "0.3.2" 834 | source = "registry+https://github.com/rust-lang/crates.io-index" 835 | checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07" 836 | dependencies = [ 837 | "autocfg 1.3.0", 838 | "num-integer", 839 | "num-traits", 840 | ] 841 | 842 | [[package]] 843 | name = "num-traits" 844 | version = "0.2.19" 845 | source = "registry+https://github.com/rust-lang/crates.io-index" 846 | checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 847 | dependencies = [ 848 | "autocfg 1.3.0", 849 | ] 850 | 851 | [[package]] 852 | name = "objc" 853 | version = "0.2.7" 854 | source = "registry+https://github.com/rust-lang/crates.io-index" 855 | checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" 856 | dependencies = [ 857 | "malloc_buf", 858 | ] 859 | 860 | [[package]] 861 | name = "objc-foundation" 862 | version = "0.1.1" 863 | source = "registry+https://github.com/rust-lang/crates.io-index" 864 | checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" 865 | dependencies = [ 866 | "block", 867 | "objc", 868 | "objc_id", 869 | ] 870 | 871 | [[package]] 872 | name = "objc_id" 873 | version = "0.1.1" 874 | source = "registry+https://github.com/rust-lang/crates.io-index" 875 | checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" 876 | dependencies = [ 877 | "objc", 878 | ] 879 | 880 | [[package]] 881 | name = "object" 882 | version = "0.36.0" 883 | source = "registry+https://github.com/rust-lang/crates.io-index" 884 | checksum = "576dfe1fc8f9df304abb159d767a29d0476f7750fbf8aa7ad07816004a207434" 885 | dependencies = [ 886 | "memchr", 887 | ] 888 | 889 | [[package]] 890 | name = "once_cell" 891 | version = "1.19.0" 892 | source = "registry+https://github.com/rust-lang/crates.io-index" 893 | checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" 894 | 895 | [[package]] 896 | name = "onig" 897 | version = "6.4.0" 898 | source = "registry+https://github.com/rust-lang/crates.io-index" 899 | checksum = "8c4b31c8722ad9171c6d77d3557db078cab2bd50afcc9d09c8b315c59df8ca4f" 900 | dependencies = [ 901 | "bitflags 1.3.2", 902 | "libc", 903 | "once_cell", 904 | "onig_sys", 905 | ] 906 | 907 | [[package]] 908 | name = "onig_sys" 909 | version = "69.8.1" 910 | source = "registry+https://github.com/rust-lang/crates.io-index" 911 | checksum = "7b829e3d7e9cc74c7e315ee8edb185bf4190da5acde74afd7fc59c35b1f086e7" 912 | dependencies = [ 913 | "cc", 914 | "pkg-config", 915 | ] 916 | 917 | [[package]] 918 | name = "palette" 919 | version = "0.3.0" 920 | source = "registry+https://github.com/rust-lang/crates.io-index" 921 | checksum = "c0514191b8ea7d7ee7e8982067929a6f0139d93584f82562d5e5e0e6ac738950" 922 | dependencies = [ 923 | "approx", 924 | "num-traits", 925 | "phf", 926 | "phf_codegen", 927 | ] 928 | 929 | [[package]] 930 | name = "percent-encoding" 931 | version = "2.3.1" 932 | source = "registry+https://github.com/rust-lang/crates.io-index" 933 | checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 934 | 935 | [[package]] 936 | name = "phf" 937 | version = "0.7.24" 938 | source = "registry+https://github.com/rust-lang/crates.io-index" 939 | checksum = "b3da44b85f8e8dfaec21adae67f95d93244b2ecf6ad2a692320598dcc8e6dd18" 940 | dependencies = [ 941 | "phf_shared", 942 | ] 943 | 944 | [[package]] 945 | name = "phf_codegen" 946 | version = "0.7.24" 947 | source = "registry+https://github.com/rust-lang/crates.io-index" 948 | checksum = "b03e85129e324ad4166b06b2c7491ae27fe3ec353af72e72cd1654c7225d517e" 949 | dependencies = [ 950 | "phf_generator", 951 | "phf_shared", 952 | ] 953 | 954 | [[package]] 955 | name = "phf_generator" 956 | version = "0.7.24" 957 | source = "registry+https://github.com/rust-lang/crates.io-index" 958 | checksum = "09364cc93c159b8b06b1f4dd8a4398984503483891b0c26b867cf431fb132662" 959 | dependencies = [ 960 | "phf_shared", 961 | "rand 0.6.5", 962 | ] 963 | 964 | [[package]] 965 | name = "phf_shared" 966 | version = "0.7.24" 967 | source = "registry+https://github.com/rust-lang/crates.io-index" 968 | checksum = "234f71a15de2288bcb7e3b6515828d22af7ec8598ee6d24c3b526fa0a80b67a0" 969 | dependencies = [ 970 | "siphasher", 971 | ] 972 | 973 | [[package]] 974 | name = "pkg-config" 975 | version = "0.3.30" 976 | source = "registry+https://github.com/rust-lang/crates.io-index" 977 | checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" 978 | 979 | [[package]] 980 | name = "plist" 981 | version = "1.6.1" 982 | source = "registry+https://github.com/rust-lang/crates.io-index" 983 | checksum = "d9d34169e64b3c7a80c8621a48adaf44e0cf62c78a9b25dd9dd35f1881a17cf9" 984 | dependencies = [ 985 | "base64 0.21.7", 986 | "indexmap", 987 | "line-wrap", 988 | "quick-xml", 989 | "serde", 990 | "time", 991 | ] 992 | 993 | [[package]] 994 | name = "png" 995 | version = "0.16.8" 996 | source = "registry+https://github.com/rust-lang/crates.io-index" 997 | checksum = "3c3287920cb847dee3de33d301c463fba14dda99db24214ddf93f83d3021f4c6" 998 | dependencies = [ 999 | "bitflags 1.3.2", 1000 | "crc32fast", 1001 | "deflate", 1002 | "miniz_oxide 0.3.7", 1003 | ] 1004 | 1005 | [[package]] 1006 | name = "powerfmt" 1007 | version = "0.2.0" 1008 | source = "registry+https://github.com/rust-lang/crates.io-index" 1009 | checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" 1010 | 1011 | [[package]] 1012 | name = "proc-macro2" 1013 | version = "1.0.86" 1014 | source = "registry+https://github.com/rust-lang/crates.io-index" 1015 | checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" 1016 | dependencies = [ 1017 | "unicode-ident", 1018 | ] 1019 | 1020 | [[package]] 1021 | name = "pulldown-cmark" 1022 | version = "0.9.6" 1023 | source = "registry+https://github.com/rust-lang/crates.io-index" 1024 | checksum = "57206b407293d2bcd3af849ce869d52068623f19e1b5ff8e8778e3309439682b" 1025 | dependencies = [ 1026 | "bitflags 2.5.0", 1027 | "getopts", 1028 | "memchr", 1029 | "unicase", 1030 | ] 1031 | 1032 | [[package]] 1033 | name = "quick-xml" 1034 | version = "0.31.0" 1035 | source = "registry+https://github.com/rust-lang/crates.io-index" 1036 | checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33" 1037 | dependencies = [ 1038 | "memchr", 1039 | ] 1040 | 1041 | [[package]] 1042 | name = "quote" 1043 | version = "1.0.36" 1044 | source = "registry+https://github.com/rust-lang/crates.io-index" 1045 | checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" 1046 | dependencies = [ 1047 | "proc-macro2", 1048 | ] 1049 | 1050 | [[package]] 1051 | name = "rand" 1052 | version = "0.4.6" 1053 | source = "registry+https://github.com/rust-lang/crates.io-index" 1054 | checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" 1055 | dependencies = [ 1056 | "fuchsia-cprng", 1057 | "libc", 1058 | "rand_core 0.3.1", 1059 | "rdrand", 1060 | "winapi", 1061 | ] 1062 | 1063 | [[package]] 1064 | name = "rand" 1065 | version = "0.6.5" 1066 | source = "registry+https://github.com/rust-lang/crates.io-index" 1067 | checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" 1068 | dependencies = [ 1069 | "autocfg 0.1.8", 1070 | "libc", 1071 | "rand_chacha", 1072 | "rand_core 0.4.2", 1073 | "rand_hc", 1074 | "rand_isaac", 1075 | "rand_jitter", 1076 | "rand_os", 1077 | "rand_pcg", 1078 | "rand_xorshift", 1079 | "winapi", 1080 | ] 1081 | 1082 | [[package]] 1083 | name = "rand_chacha" 1084 | version = "0.1.1" 1085 | source = "registry+https://github.com/rust-lang/crates.io-index" 1086 | checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" 1087 | dependencies = [ 1088 | "autocfg 0.1.8", 1089 | "rand_core 0.3.1", 1090 | ] 1091 | 1092 | [[package]] 1093 | name = "rand_core" 1094 | version = "0.3.1" 1095 | source = "registry+https://github.com/rust-lang/crates.io-index" 1096 | checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" 1097 | dependencies = [ 1098 | "rand_core 0.4.2", 1099 | ] 1100 | 1101 | [[package]] 1102 | name = "rand_core" 1103 | version = "0.4.2" 1104 | source = "registry+https://github.com/rust-lang/crates.io-index" 1105 | checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" 1106 | 1107 | [[package]] 1108 | name = "rand_hc" 1109 | version = "0.1.0" 1110 | source = "registry+https://github.com/rust-lang/crates.io-index" 1111 | checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" 1112 | dependencies = [ 1113 | "rand_core 0.3.1", 1114 | ] 1115 | 1116 | [[package]] 1117 | name = "rand_isaac" 1118 | version = "0.1.1" 1119 | source = "registry+https://github.com/rust-lang/crates.io-index" 1120 | checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" 1121 | dependencies = [ 1122 | "rand_core 0.3.1", 1123 | ] 1124 | 1125 | [[package]] 1126 | name = "rand_jitter" 1127 | version = "0.1.4" 1128 | source = "registry+https://github.com/rust-lang/crates.io-index" 1129 | checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" 1130 | dependencies = [ 1131 | "libc", 1132 | "rand_core 0.4.2", 1133 | "winapi", 1134 | ] 1135 | 1136 | [[package]] 1137 | name = "rand_os" 1138 | version = "0.1.3" 1139 | source = "registry+https://github.com/rust-lang/crates.io-index" 1140 | checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" 1141 | dependencies = [ 1142 | "cloudabi", 1143 | "fuchsia-cprng", 1144 | "libc", 1145 | "rand_core 0.4.2", 1146 | "rdrand", 1147 | "winapi", 1148 | ] 1149 | 1150 | [[package]] 1151 | name = "rand_pcg" 1152 | version = "0.1.2" 1153 | source = "registry+https://github.com/rust-lang/crates.io-index" 1154 | checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" 1155 | dependencies = [ 1156 | "autocfg 0.1.8", 1157 | "rand_core 0.4.2", 1158 | ] 1159 | 1160 | [[package]] 1161 | name = "rand_xorshift" 1162 | version = "0.1.1" 1163 | source = "registry+https://github.com/rust-lang/crates.io-index" 1164 | checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" 1165 | dependencies = [ 1166 | "rand_core 0.3.1", 1167 | ] 1168 | 1169 | [[package]] 1170 | name = "raw-window-handle" 1171 | version = "0.5.2" 1172 | source = "registry+https://github.com/rust-lang/crates.io-index" 1173 | checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" 1174 | 1175 | [[package]] 1176 | name = "rayon" 1177 | version = "1.10.0" 1178 | source = "registry+https://github.com/rust-lang/crates.io-index" 1179 | checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" 1180 | dependencies = [ 1181 | "either", 1182 | "rayon-core", 1183 | ] 1184 | 1185 | [[package]] 1186 | name = "rayon-core" 1187 | version = "1.12.1" 1188 | source = "registry+https://github.com/rust-lang/crates.io-index" 1189 | checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" 1190 | dependencies = [ 1191 | "crossbeam-deque", 1192 | "crossbeam-utils", 1193 | ] 1194 | 1195 | [[package]] 1196 | name = "rdrand" 1197 | version = "0.4.0" 1198 | source = "registry+https://github.com/rust-lang/crates.io-index" 1199 | checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" 1200 | dependencies = [ 1201 | "rand_core 0.3.1", 1202 | ] 1203 | 1204 | [[package]] 1205 | name = "regex" 1206 | version = "1.10.5" 1207 | source = "registry+https://github.com/rust-lang/crates.io-index" 1208 | checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" 1209 | dependencies = [ 1210 | "aho-corasick", 1211 | "memchr", 1212 | "regex-automata", 1213 | "regex-syntax 0.8.4", 1214 | ] 1215 | 1216 | [[package]] 1217 | name = "regex-automata" 1218 | version = "0.4.7" 1219 | source = "registry+https://github.com/rust-lang/crates.io-index" 1220 | checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" 1221 | dependencies = [ 1222 | "aho-corasick", 1223 | "memchr", 1224 | "regex-syntax 0.8.4", 1225 | ] 1226 | 1227 | [[package]] 1228 | name = "regex-syntax" 1229 | version = "0.6.29" 1230 | source = "registry+https://github.com/rust-lang/crates.io-index" 1231 | checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" 1232 | 1233 | [[package]] 1234 | name = "regex-syntax" 1235 | version = "0.8.4" 1236 | source = "registry+https://github.com/rust-lang/crates.io-index" 1237 | checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" 1238 | 1239 | [[package]] 1240 | name = "remove_dir_all" 1241 | version = "0.5.3" 1242 | source = "registry+https://github.com/rust-lang/crates.io-index" 1243 | checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" 1244 | dependencies = [ 1245 | "winapi", 1246 | ] 1247 | 1248 | [[package]] 1249 | name = "rustc-demangle" 1250 | version = "0.1.24" 1251 | source = "registry+https://github.com/rust-lang/crates.io-index" 1252 | checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" 1253 | 1254 | [[package]] 1255 | name = "ryu" 1256 | version = "1.0.18" 1257 | source = "registry+https://github.com/rust-lang/crates.io-index" 1258 | checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" 1259 | 1260 | [[package]] 1261 | name = "same-file" 1262 | version = "1.0.6" 1263 | source = "registry+https://github.com/rust-lang/crates.io-index" 1264 | checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 1265 | dependencies = [ 1266 | "winapi-util", 1267 | ] 1268 | 1269 | [[package]] 1270 | name = "scoped_threadpool" 1271 | version = "0.1.9" 1272 | source = "registry+https://github.com/rust-lang/crates.io-index" 1273 | checksum = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8" 1274 | 1275 | [[package]] 1276 | name = "serde" 1277 | version = "1.0.203" 1278 | source = "registry+https://github.com/rust-lang/crates.io-index" 1279 | checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" 1280 | dependencies = [ 1281 | "serde_derive", 1282 | ] 1283 | 1284 | [[package]] 1285 | name = "serde_derive" 1286 | version = "1.0.203" 1287 | source = "registry+https://github.com/rust-lang/crates.io-index" 1288 | checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" 1289 | dependencies = [ 1290 | "proc-macro2", 1291 | "quote", 1292 | "syn 2.0.67", 1293 | ] 1294 | 1295 | [[package]] 1296 | name = "serde_json" 1297 | version = "1.0.117" 1298 | source = "registry+https://github.com/rust-lang/crates.io-index" 1299 | checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" 1300 | dependencies = [ 1301 | "itoa", 1302 | "ryu", 1303 | "serde", 1304 | ] 1305 | 1306 | [[package]] 1307 | name = "siphasher" 1308 | version = "0.2.3" 1309 | source = "registry+https://github.com/rust-lang/crates.io-index" 1310 | checksum = "0b8de496cf83d4ed58b6be86c3a275b8602f6ffe98d3024a869e124147a9a3ac" 1311 | 1312 | [[package]] 1313 | name = "strsim" 1314 | version = "0.8.0" 1315 | source = "registry+https://github.com/rust-lang/crates.io-index" 1316 | checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" 1317 | 1318 | [[package]] 1319 | name = "syn" 1320 | version = "1.0.109" 1321 | source = "registry+https://github.com/rust-lang/crates.io-index" 1322 | checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" 1323 | dependencies = [ 1324 | "proc-macro2", 1325 | "quote", 1326 | "unicode-ident", 1327 | ] 1328 | 1329 | [[package]] 1330 | name = "syn" 1331 | version = "2.0.67" 1332 | source = "registry+https://github.com/rust-lang/crates.io-index" 1333 | checksum = "ff8655ed1d86f3af4ee3fd3263786bc14245ad17c4c7e85ba7187fb3ae028c90" 1334 | dependencies = [ 1335 | "proc-macro2", 1336 | "quote", 1337 | "unicode-ident", 1338 | ] 1339 | 1340 | [[package]] 1341 | name = "synstructure" 1342 | version = "0.12.6" 1343 | source = "registry+https://github.com/rust-lang/crates.io-index" 1344 | checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" 1345 | dependencies = [ 1346 | "proc-macro2", 1347 | "quote", 1348 | "syn 1.0.109", 1349 | "unicode-xid", 1350 | ] 1351 | 1352 | [[package]] 1353 | name = "syntect" 1354 | version = "4.6.0" 1355 | source = "registry+https://github.com/rust-lang/crates.io-index" 1356 | checksum = "8b20815bbe80ee0be06e6957450a841185fcf690fe0178f14d77a05ce2caa031" 1357 | dependencies = [ 1358 | "bincode", 1359 | "bitflags 1.3.2", 1360 | "flate2", 1361 | "fnv", 1362 | "lazy_static", 1363 | "lazycell", 1364 | "onig", 1365 | "plist", 1366 | "regex-syntax 0.6.29", 1367 | "serde", 1368 | "serde_derive", 1369 | "serde_json", 1370 | "walkdir", 1371 | "yaml-rust", 1372 | ] 1373 | 1374 | [[package]] 1375 | name = "tempdir" 1376 | version = "0.3.7" 1377 | source = "registry+https://github.com/rust-lang/crates.io-index" 1378 | checksum = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8" 1379 | dependencies = [ 1380 | "rand 0.4.6", 1381 | "remove_dir_all", 1382 | ] 1383 | 1384 | [[package]] 1385 | name = "termcolor" 1386 | version = "1.4.1" 1387 | source = "registry+https://github.com/rust-lang/crates.io-index" 1388 | checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" 1389 | dependencies = [ 1390 | "winapi-util", 1391 | ] 1392 | 1393 | [[package]] 1394 | name = "textscribe" 1395 | version = "0.1.4" 1396 | dependencies = [ 1397 | "anyhow", 1398 | "arc", 1399 | "base64 0.13.1", 1400 | "clap", 1401 | "clipboard", 1402 | "env_logger", 1403 | "epub-builder", 1404 | "image", 1405 | "log 0.4.21", 1406 | "pulldown-cmark", 1407 | "rayon", 1408 | "regex", 1409 | "syntect", 1410 | "webbrowser", 1411 | ] 1412 | 1413 | [[package]] 1414 | name = "textwrap" 1415 | version = "0.11.0" 1416 | source = "registry+https://github.com/rust-lang/crates.io-index" 1417 | checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" 1418 | dependencies = [ 1419 | "unicode-width", 1420 | ] 1421 | 1422 | [[package]] 1423 | name = "thiserror" 1424 | version = "1.0.61" 1425 | source = "registry+https://github.com/rust-lang/crates.io-index" 1426 | checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" 1427 | dependencies = [ 1428 | "thiserror-impl", 1429 | ] 1430 | 1431 | [[package]] 1432 | name = "thiserror-impl" 1433 | version = "1.0.61" 1434 | source = "registry+https://github.com/rust-lang/crates.io-index" 1435 | checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" 1436 | dependencies = [ 1437 | "proc-macro2", 1438 | "quote", 1439 | "syn 2.0.67", 1440 | ] 1441 | 1442 | [[package]] 1443 | name = "tiff" 1444 | version = "0.6.1" 1445 | source = "registry+https://github.com/rust-lang/crates.io-index" 1446 | checksum = "9a53f4706d65497df0c4349241deddf35f84cee19c87ed86ea8ca590f4464437" 1447 | dependencies = [ 1448 | "jpeg-decoder", 1449 | "miniz_oxide 0.4.4", 1450 | "weezl", 1451 | ] 1452 | 1453 | [[package]] 1454 | name = "time" 1455 | version = "0.3.36" 1456 | source = "registry+https://github.com/rust-lang/crates.io-index" 1457 | checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" 1458 | dependencies = [ 1459 | "deranged", 1460 | "itoa", 1461 | "num-conv", 1462 | "powerfmt", 1463 | "serde", 1464 | "time-core", 1465 | "time-macros", 1466 | ] 1467 | 1468 | [[package]] 1469 | name = "time-core" 1470 | version = "0.1.2" 1471 | source = "registry+https://github.com/rust-lang/crates.io-index" 1472 | checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" 1473 | 1474 | [[package]] 1475 | name = "time-macros" 1476 | version = "0.2.18" 1477 | source = "registry+https://github.com/rust-lang/crates.io-index" 1478 | checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" 1479 | dependencies = [ 1480 | "num-conv", 1481 | "time-core", 1482 | ] 1483 | 1484 | [[package]] 1485 | name = "tinyvec" 1486 | version = "1.6.0" 1487 | source = "registry+https://github.com/rust-lang/crates.io-index" 1488 | checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" 1489 | dependencies = [ 1490 | "tinyvec_macros", 1491 | ] 1492 | 1493 | [[package]] 1494 | name = "tinyvec_macros" 1495 | version = "0.1.1" 1496 | source = "registry+https://github.com/rust-lang/crates.io-index" 1497 | checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 1498 | 1499 | [[package]] 1500 | name = "unicase" 1501 | version = "2.7.0" 1502 | source = "registry+https://github.com/rust-lang/crates.io-index" 1503 | checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" 1504 | dependencies = [ 1505 | "version_check", 1506 | ] 1507 | 1508 | [[package]] 1509 | name = "unicode-bidi" 1510 | version = "0.3.15" 1511 | source = "registry+https://github.com/rust-lang/crates.io-index" 1512 | checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" 1513 | 1514 | [[package]] 1515 | name = "unicode-ident" 1516 | version = "1.0.12" 1517 | source = "registry+https://github.com/rust-lang/crates.io-index" 1518 | checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" 1519 | 1520 | [[package]] 1521 | name = "unicode-normalization" 1522 | version = "0.1.23" 1523 | source = "registry+https://github.com/rust-lang/crates.io-index" 1524 | checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" 1525 | dependencies = [ 1526 | "tinyvec", 1527 | ] 1528 | 1529 | [[package]] 1530 | name = "unicode-width" 1531 | version = "0.1.13" 1532 | source = "registry+https://github.com/rust-lang/crates.io-index" 1533 | checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" 1534 | 1535 | [[package]] 1536 | name = "unicode-xid" 1537 | version = "0.2.4" 1538 | source = "registry+https://github.com/rust-lang/crates.io-index" 1539 | checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" 1540 | 1541 | [[package]] 1542 | name = "url" 1543 | version = "2.5.2" 1544 | source = "registry+https://github.com/rust-lang/crates.io-index" 1545 | checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" 1546 | dependencies = [ 1547 | "form_urlencoded", 1548 | "idna", 1549 | "percent-encoding", 1550 | ] 1551 | 1552 | [[package]] 1553 | name = "utf8-width" 1554 | version = "0.1.7" 1555 | source = "registry+https://github.com/rust-lang/crates.io-index" 1556 | checksum = "86bd8d4e895da8537e5315b8254664e6b769c4ff3db18321b297a1e7004392e3" 1557 | 1558 | [[package]] 1559 | name = "uuid" 1560 | version = "1.8.0" 1561 | source = "registry+https://github.com/rust-lang/crates.io-index" 1562 | checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" 1563 | dependencies = [ 1564 | "getrandom", 1565 | ] 1566 | 1567 | [[package]] 1568 | name = "vec_map" 1569 | version = "0.8.2" 1570 | source = "registry+https://github.com/rust-lang/crates.io-index" 1571 | checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" 1572 | 1573 | [[package]] 1574 | name = "version_check" 1575 | version = "0.9.4" 1576 | source = "registry+https://github.com/rust-lang/crates.io-index" 1577 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 1578 | 1579 | [[package]] 1580 | name = "walkdir" 1581 | version = "2.5.0" 1582 | source = "registry+https://github.com/rust-lang/crates.io-index" 1583 | checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" 1584 | dependencies = [ 1585 | "same-file", 1586 | "winapi-util", 1587 | ] 1588 | 1589 | [[package]] 1590 | name = "wasi" 1591 | version = "0.11.0+wasi-snapshot-preview1" 1592 | source = "registry+https://github.com/rust-lang/crates.io-index" 1593 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 1594 | 1595 | [[package]] 1596 | name = "wasm-bindgen" 1597 | version = "0.2.92" 1598 | source = "registry+https://github.com/rust-lang/crates.io-index" 1599 | checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" 1600 | dependencies = [ 1601 | "cfg-if", 1602 | "wasm-bindgen-macro", 1603 | ] 1604 | 1605 | [[package]] 1606 | name = "wasm-bindgen-backend" 1607 | version = "0.2.92" 1608 | source = "registry+https://github.com/rust-lang/crates.io-index" 1609 | checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" 1610 | dependencies = [ 1611 | "bumpalo", 1612 | "log 0.4.21", 1613 | "once_cell", 1614 | "proc-macro2", 1615 | "quote", 1616 | "syn 2.0.67", 1617 | "wasm-bindgen-shared", 1618 | ] 1619 | 1620 | [[package]] 1621 | name = "wasm-bindgen-macro" 1622 | version = "0.2.92" 1623 | source = "registry+https://github.com/rust-lang/crates.io-index" 1624 | checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" 1625 | dependencies = [ 1626 | "quote", 1627 | "wasm-bindgen-macro-support", 1628 | ] 1629 | 1630 | [[package]] 1631 | name = "wasm-bindgen-macro-support" 1632 | version = "0.2.92" 1633 | source = "registry+https://github.com/rust-lang/crates.io-index" 1634 | checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" 1635 | dependencies = [ 1636 | "proc-macro2", 1637 | "quote", 1638 | "syn 2.0.67", 1639 | "wasm-bindgen-backend", 1640 | "wasm-bindgen-shared", 1641 | ] 1642 | 1643 | [[package]] 1644 | name = "wasm-bindgen-shared" 1645 | version = "0.2.92" 1646 | source = "registry+https://github.com/rust-lang/crates.io-index" 1647 | checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" 1648 | 1649 | [[package]] 1650 | name = "web-sys" 1651 | version = "0.3.69" 1652 | source = "registry+https://github.com/rust-lang/crates.io-index" 1653 | checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" 1654 | dependencies = [ 1655 | "js-sys", 1656 | "wasm-bindgen", 1657 | ] 1658 | 1659 | [[package]] 1660 | name = "webbrowser" 1661 | version = "0.8.15" 1662 | source = "registry+https://github.com/rust-lang/crates.io-index" 1663 | checksum = "db67ae75a9405634f5882791678772c94ff5f16a66535aae186e26aa0841fc8b" 1664 | dependencies = [ 1665 | "core-foundation 0.9.4", 1666 | "home", 1667 | "jni", 1668 | "log 0.4.21", 1669 | "ndk-context", 1670 | "objc", 1671 | "raw-window-handle", 1672 | "url", 1673 | "web-sys", 1674 | ] 1675 | 1676 | [[package]] 1677 | name = "weezl" 1678 | version = "0.1.8" 1679 | source = "registry+https://github.com/rust-lang/crates.io-index" 1680 | checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" 1681 | 1682 | [[package]] 1683 | name = "winapi" 1684 | version = "0.3.9" 1685 | source = "registry+https://github.com/rust-lang/crates.io-index" 1686 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 1687 | dependencies = [ 1688 | "winapi-i686-pc-windows-gnu", 1689 | "winapi-x86_64-pc-windows-gnu", 1690 | ] 1691 | 1692 | [[package]] 1693 | name = "winapi-i686-pc-windows-gnu" 1694 | version = "0.4.0" 1695 | source = "registry+https://github.com/rust-lang/crates.io-index" 1696 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 1697 | 1698 | [[package]] 1699 | name = "winapi-util" 1700 | version = "0.1.8" 1701 | source = "registry+https://github.com/rust-lang/crates.io-index" 1702 | checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" 1703 | dependencies = [ 1704 | "windows-sys 0.52.0", 1705 | ] 1706 | 1707 | [[package]] 1708 | name = "winapi-x86_64-pc-windows-gnu" 1709 | version = "0.4.0" 1710 | source = "registry+https://github.com/rust-lang/crates.io-index" 1711 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 1712 | 1713 | [[package]] 1714 | name = "windows-core" 1715 | version = "0.52.0" 1716 | source = "registry+https://github.com/rust-lang/crates.io-index" 1717 | checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" 1718 | dependencies = [ 1719 | "windows-targets 0.52.5", 1720 | ] 1721 | 1722 | [[package]] 1723 | name = "windows-sys" 1724 | version = "0.45.0" 1725 | source = "registry+https://github.com/rust-lang/crates.io-index" 1726 | checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" 1727 | dependencies = [ 1728 | "windows-targets 0.42.2", 1729 | ] 1730 | 1731 | [[package]] 1732 | name = "windows-sys" 1733 | version = "0.52.0" 1734 | source = "registry+https://github.com/rust-lang/crates.io-index" 1735 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 1736 | dependencies = [ 1737 | "windows-targets 0.52.5", 1738 | ] 1739 | 1740 | [[package]] 1741 | name = "windows-targets" 1742 | version = "0.42.2" 1743 | source = "registry+https://github.com/rust-lang/crates.io-index" 1744 | checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" 1745 | dependencies = [ 1746 | "windows_aarch64_gnullvm 0.42.2", 1747 | "windows_aarch64_msvc 0.42.2", 1748 | "windows_i686_gnu 0.42.2", 1749 | "windows_i686_msvc 0.42.2", 1750 | "windows_x86_64_gnu 0.42.2", 1751 | "windows_x86_64_gnullvm 0.42.2", 1752 | "windows_x86_64_msvc 0.42.2", 1753 | ] 1754 | 1755 | [[package]] 1756 | name = "windows-targets" 1757 | version = "0.52.5" 1758 | source = "registry+https://github.com/rust-lang/crates.io-index" 1759 | checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" 1760 | dependencies = [ 1761 | "windows_aarch64_gnullvm 0.52.5", 1762 | "windows_aarch64_msvc 0.52.5", 1763 | "windows_i686_gnu 0.52.5", 1764 | "windows_i686_gnullvm", 1765 | "windows_i686_msvc 0.52.5", 1766 | "windows_x86_64_gnu 0.52.5", 1767 | "windows_x86_64_gnullvm 0.52.5", 1768 | "windows_x86_64_msvc 0.52.5", 1769 | ] 1770 | 1771 | [[package]] 1772 | name = "windows_aarch64_gnullvm" 1773 | version = "0.42.2" 1774 | source = "registry+https://github.com/rust-lang/crates.io-index" 1775 | checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" 1776 | 1777 | [[package]] 1778 | name = "windows_aarch64_gnullvm" 1779 | version = "0.52.5" 1780 | source = "registry+https://github.com/rust-lang/crates.io-index" 1781 | checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" 1782 | 1783 | [[package]] 1784 | name = "windows_aarch64_msvc" 1785 | version = "0.42.2" 1786 | source = "registry+https://github.com/rust-lang/crates.io-index" 1787 | checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" 1788 | 1789 | [[package]] 1790 | name = "windows_aarch64_msvc" 1791 | version = "0.52.5" 1792 | source = "registry+https://github.com/rust-lang/crates.io-index" 1793 | checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" 1794 | 1795 | [[package]] 1796 | name = "windows_i686_gnu" 1797 | version = "0.42.2" 1798 | source = "registry+https://github.com/rust-lang/crates.io-index" 1799 | checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" 1800 | 1801 | [[package]] 1802 | name = "windows_i686_gnu" 1803 | version = "0.52.5" 1804 | source = "registry+https://github.com/rust-lang/crates.io-index" 1805 | checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" 1806 | 1807 | [[package]] 1808 | name = "windows_i686_gnullvm" 1809 | version = "0.52.5" 1810 | source = "registry+https://github.com/rust-lang/crates.io-index" 1811 | checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" 1812 | 1813 | [[package]] 1814 | name = "windows_i686_msvc" 1815 | version = "0.42.2" 1816 | source = "registry+https://github.com/rust-lang/crates.io-index" 1817 | checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" 1818 | 1819 | [[package]] 1820 | name = "windows_i686_msvc" 1821 | version = "0.52.5" 1822 | source = "registry+https://github.com/rust-lang/crates.io-index" 1823 | checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" 1824 | 1825 | [[package]] 1826 | name = "windows_x86_64_gnu" 1827 | version = "0.42.2" 1828 | source = "registry+https://github.com/rust-lang/crates.io-index" 1829 | checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" 1830 | 1831 | [[package]] 1832 | name = "windows_x86_64_gnu" 1833 | version = "0.52.5" 1834 | source = "registry+https://github.com/rust-lang/crates.io-index" 1835 | checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" 1836 | 1837 | [[package]] 1838 | name = "windows_x86_64_gnullvm" 1839 | version = "0.42.2" 1840 | source = "registry+https://github.com/rust-lang/crates.io-index" 1841 | checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" 1842 | 1843 | [[package]] 1844 | name = "windows_x86_64_gnullvm" 1845 | version = "0.52.5" 1846 | source = "registry+https://github.com/rust-lang/crates.io-index" 1847 | checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" 1848 | 1849 | [[package]] 1850 | name = "windows_x86_64_msvc" 1851 | version = "0.42.2" 1852 | source = "registry+https://github.com/rust-lang/crates.io-index" 1853 | checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" 1854 | 1855 | [[package]] 1856 | name = "windows_x86_64_msvc" 1857 | version = "0.52.5" 1858 | source = "registry+https://github.com/rust-lang/crates.io-index" 1859 | checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" 1860 | 1861 | [[package]] 1862 | name = "x11-clipboard" 1863 | version = "0.3.3" 1864 | source = "registry+https://github.com/rust-lang/crates.io-index" 1865 | checksum = "89bd49c06c9eb5d98e6ba6536cf64ac9f7ee3a009b2f53996d405b3944f6bcea" 1866 | dependencies = [ 1867 | "xcb", 1868 | ] 1869 | 1870 | [[package]] 1871 | name = "xcb" 1872 | version = "0.8.2" 1873 | source = "registry+https://github.com/rust-lang/crates.io-index" 1874 | checksum = "5e917a3f24142e9ff8be2414e36c649d47d6cc2ba81f16201cdef96e533e02de" 1875 | dependencies = [ 1876 | "libc", 1877 | "log 0.4.21", 1878 | ] 1879 | 1880 | [[package]] 1881 | name = "yaml-rust" 1882 | version = "0.4.5" 1883 | source = "registry+https://github.com/rust-lang/crates.io-index" 1884 | checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" 1885 | dependencies = [ 1886 | "linked-hash-map", 1887 | ] 1888 | 1889 | [[package]] 1890 | name = "zip" 1891 | version = "0.6.6" 1892 | source = "registry+https://github.com/rust-lang/crates.io-index" 1893 | checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" 1894 | dependencies = [ 1895 | "byteorder", 1896 | "crc32fast", 1897 | "crossbeam-utils", 1898 | "flate2", 1899 | "time", 1900 | ] 1901 | --------------------------------------------------------------------------------