Michael-F-Bryan / mdbook-epub

An experimental mdbook backend for creating EPUB documents.
https://michael-f-bryan.github.io/mdbook-epub/
Mozilla Public License 2.0
377 stars 46 forks source link

EPUB files are missing images #19

Closed MaciekTalaska closed 5 years ago

MaciekTalaska commented 5 years ago

Thanks for your work.

I have generated an epub from the latest sources of the 'Rust Programming Language', but the generated EPUB is missing images.

Am I doing something wrong? Or is this feature missing at the moment?

Michael-F-Bryan commented 5 years ago

Hmm... I'm not sure what's wrong here. We have a test which checks to make sure we can detect image assets in a document. Then later on it uses the resources::find() method to find all assets so they can be embedded.

That said, I haven't done much/any development on this crate in quite a while, and didn't test it very thoroughly. So I wouldn't be surprised if there were logical bugs around embedding assets...

MaciekTalaska commented 5 years ago

Thanks for your reply.

What I was trying to do is to make EPUB from the sources of The Rust Programming Language.

My OS is Ubuntu derivative, with kernel 5.0.0-15

I am using Rust 1.34.0. Before trying to use mdbook-epub I have built and installed mdbook and then mdbook-epub.

My steps were as follows:

  1. Cloned the git repo of the book
  2. Edited the book.toml file as required for mdbook-epub. The file after the changes is as follows:
    
    [book]
    title = "The Rust Programming Language"
    author = "Steve Klabnik and Carol Nichols, with Contributions from the Rust Community"

[output.html] additional-css = ["ferris.css", "theme/2018-edition.css"] additional-js = ["ferris.js"]

[output.epub]


3. I have navigated to the folder where the TRPL has been cloned to, and I issued the command: `mdbook build`. It resulted in `book` directory being created and also an `epub` subdirectory containing the epub file.
The ferris images are missing (I thought initially this could be a problem with SVG files only, but other images are missing too - for example those used in Chapter 4).

Is there anything else I could try?
MaciekTalaska commented 5 years ago

So after some further investigation, I know what the problem is - including images works only if it is done 'markdown way' and not 'HTML way' (which is quite often used in markdown documents, as it allows additional image manipulation).

so this (like in chapter 20 in The Rust Programming Language) works:

![hello from rust](img/trpl20-01.png)

but something like that (chapter 00) will not work:

<img src="img/ferris/does_not_compile.svg" class="ferris-explain"/>
Michael-F-Bryan commented 5 years ago

That's interesting. You may want to check if mdbook are doing any filtering of content when rendering, or it may even be a problem with pulldown_cmark not allowing normal HTML. Either way, I don't think this is a bug in mdbook-epub...

MaciekTalaska commented 5 years ago

I have investigated it further. The "problem" is between pulldown-cmark and mdbook-epub. pulldown-cmark is implemented to support CommonMark which does not allow links / images provided with HTML code. Important thing is that pulldown-cmark does not touch these links at all - so these are still present in the output document.

But due to the way pulldown-cmark works mdbook-epub that is not capable of detecting that a specific file should be added to the .epub file as an image (resource). If someone wants it is possible to "fix" such files by adding all the missing graphics to the epub file generated by mdbook-epub.

I have already compiled mdbook-epub with the latest version of pulldown-cmark (hoping that processing HTML links/images was added) but that did not help.

I am trying to experiment with adding a fix for detecting images provided in HTML code. I have done some quick research on how mdbook-epub works, and I think that the only change required should be adding additional lines (detecting images in pure HTML) to the assets_in_markdown function in resources.rs file: https://github.com/Michael-F-Bryan/mdbook-epub/blob/8923ad4cc630a60389cd4e6e07ecb31f4b441096/src/resources.rs#L62

I will try to fix that when I have some more free time. Thanks.

tejaswigowda commented 2 years ago

Any update?

Initsnow commented 6 months ago

Any update? 任何更新?

None,Still error in img tag,can't work well

blandger commented 6 months ago

Any update? 任何更新?

None,Still error in img tag,can't work well

Did you try run utility with logging enabled and attach your log here? RUST_LOG=Debug... can help identify issue

I can give you a suitable command later.

Initsnow commented 6 months ago

Any update? 任何更新?

None,Still error in img tag,can't work well

Did you try run utility with logging enabled and attach your log here? RUST_LOG=Debug... can help identify issue

I can give you a suitable command later.

there

mdbook-epub -s true

Details

[2024-03-23T18:18:34Z INFO mdbook_epub] Booting EPUB generator... [2024-03-23T18:18:34Z DEBUG mdbook_epub] prepared generator args = Args { standalone: true, root: "." } [2024-03-23T18:18:34Z DEBUG mdbook_epub] run EPUB book build... Running mdbook-epub as standalone app... [2024-03-23T18:18:34Z DEBUG mdbook::book] Loading config from .\book.toml [2024-03-23T18:18:34Z DEBUG mdbook::config] Updating the config from environment variables [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Found a h1 in the SUMMARY [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing prefix items [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Found a h1 in the SUMMARY [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 0 [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 1. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 2. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 2.2. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 2.3. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 2.4. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 2.6. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 2.8. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 2.9. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 2.11. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 2.12. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 3. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Found a h1 in the SUMMARY [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 0 [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 1. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 1.1. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 1.2. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 1.3. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 1.4. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 1.5. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 1.6. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 1.9. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 1.11. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 2. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 3. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 0 [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 1. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Found a h1 in the SUMMARY [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 0 [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 1. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 2. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 2.2. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 2.3. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 2.3.6. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 2.3.10. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Found a h1 in the SUMMARY [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 0 [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 1. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 2. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 2.5. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 3. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 4. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 4.2. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 4.3. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 4.4. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 4.5. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 4.6. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 4.7. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 4.8. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Found a h1 in the SUMMARY [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 0 [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 1. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 1.1. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 1.1.1. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 1.1.2. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 1.2. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Found a h1 in the SUMMARY [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 0 [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 1. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 1.1. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 1.2. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 1.3. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 1.3.4. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Found a h1 in the SUMMARY [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 0 [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 1. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing numbered chapters at level 1.7. [2024-03-23T18:18:34Z DEBUG mdbook::book::summary] Parsing suffix items [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading the book from disk [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 关于本书 (about-book.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 进入 Rust 编程世界 (into-rust.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 避免从入门到放弃 (first-try/sth-you-should-not-do.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 社区和锈书 (community.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading Xobserve: 一切皆可观测 (some-thoughts.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading BeatAI: 工程师 AI 入门圣经 (beat-ai.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 寻找牛刀,以便小试 (first-try/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 安装 Rust 环境 (first-try/installation.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 墙推 VSCode! (first-try/editor.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 认识 Cargo (first-try/cargo.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 不仅仅是 Hello world (first-try/hello-world.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 下载依赖太慢了? (first-try/slowly-downloading.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading Rust 基础入门 (basic/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 变量绑定与解构 (basic/variable.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 基本类型 (basic/base-type/index.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 数值类型 (basic/base-type/numbers.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 字符、布尔、单元类型 (basic/base-type/char-bool.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 语句与表达式 (basic/base-type/statement-expression.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 函数 (basic/base-type/function.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 所有权和借用 (basic/ownership/index.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 所有权 (basic/ownership/ownership.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 引用与借用 (basic/ownership/borrowing.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 复合类型 (basic/compound-type/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 字符串与切片 (basic/compound-type/string-slice.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 元组 (basic/compound-type/tuple.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 结构体 (basic/compound-type/struct.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 枚举 (basic/compound-type/enum.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 数组 (basic/compound-type/array.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 流程控制 (basic/flow-control.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 模式匹配 (basic/match-pattern/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading match 和 if let (basic/match-pattern/match-if-let.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 解构 Option (basic/match-pattern/option.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 模式适用场景 (basic/match-pattern/pattern-match.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 全模式列表 (basic/match-pattern/all-patterns.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 方法 Method (basic/method.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 泛型和特征 (basic/trait/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 泛型 Generics (basic/trait/generic.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 特征 Trait (basic/trait/trait.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 特征对象 (basic/trait/trait-object.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 进一步深入特征 (basic/trait/advance-trait.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 集合类型 (basic/collections/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 动态数组 Vector (basic/collections/vector.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading KV 存储 HashMap (basic/collections/hashmap.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 认识生命周期 (basic/lifetime.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 返回值和错误处理 (basic/result-error/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading panic! 深入剖析 (basic/result-error/panic.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 返回值 Result 和? (basic/result-error/result.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 包和模块 (basic/crate-module/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 包 Crate (basic/crate-module/crate.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 模块 Module (basic/crate-module/module.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 使用 use 引入模块及受限可见性 (basic/crate-module/use.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 注释和文档 (basic/comment.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 格式化输出 (basic/formatted-output.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 入门实战:文件搜索工具 (basic-practice/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 基本功能 (basic-practice/base-features.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 增加模块化和错误处理 (basic-practice/refactoring.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 测试驱动开发 (basic-practice/tests.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 使用环境变量 (basic-practice/envs.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 重定向错误信息的输出 (basic-practice/stderr.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 使用迭代器来改进程序(可选) (basic-practice/iterators.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading Rust 高级进阶 (advance/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 生命周期 (advance/lifetime/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 深入生命周期 (advance/lifetime/advance.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading &'static 和 T: 'static (advance/lifetime/static.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 函数式编程: 闭包、迭代器 (advance/functional-programing/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 闭包 Closure (advance/functional-programing/closure.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 迭代器 Iterator (advance/functional-programing/iterator.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 深入类型 (advance/into-types/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 类型转换 (advance/into-types/converse.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading newtype 和 类型别名 (advance/into-types/custom-type.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading Sized 和不定长类型 DST (advance/into-types/sized.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 枚举和整数 (advance/into-types/enum-int.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 智能指针 (advance/smart-pointer/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading Box堆对象分配 (advance/smart-pointer/box.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading Deref 解引用 (advance/smart-pointer/deref.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading Drop 释放资源 (advance/smart-pointer/drop.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading Rc 与 Arc 实现 1vN 所有权机制 (advance/smart-pointer/rc-arc.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading Cell 与 RefCell 内部可变性 (advance/smart-pointer/cell-refcell.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 循环引用与自引用 (advance/circle-self-ref/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading Weak 与循环引用 (advance/circle-self-ref/circle-reference.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 结构体中的自引用 (advance/circle-self-ref/self-referential.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 多线程并发编程 (advance/concurrency-with-threads/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 并发和并行 (advance/concurrency-with-threads/concurrency-parallelism.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 使用多线程 (advance/concurrency-with-threads/thread.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 线程同步:消息传递 (advance/concurrency-with-threads/message-passing.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 线程同步:锁、Condvar 和信号量 (advance/concurrency-with-threads/sync1.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 线程同步:Atomic 原子操作与内存顺序 (advance/concurrency-with-threads/sync2.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 基于 Send 和 Sync 的线程安全 (advance/concurrency-with-threads/send-sync.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 全局变量 (advance/global-variable.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 错误处理 (advance/errors.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading Unsafe Rust (advance/unsafe/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 五种兵器 (advance/unsafe/superpowers.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 内联汇编 (advance/unsafe/inline-asm.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading Macro 宏编程 (advance/macro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading async/await 异步编程 (advance/async/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading async 编程入门 (advance/async/getting-started.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 底层探秘: Future 执行与任务调度 (advance/async/future-excuting.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 定海神针 Pin 和 Unpin (advance/async/pin-unpin.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading async/await 和 Stream 流处理 (advance/async/async-await.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 同时运行多个 Future (advance/async/multi-futures-simultaneous.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 一些疑难问题的解决办法 (advance/async/pain-points-and-workarounds.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 实践应用:Async Web 服务器 (advance/async/web-server.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 进阶实战1: 实现一个 web 服务器 (advance-practice1/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 单线程版本 (advance-practice1/web-server.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 多线程版本 (advance-practice1/multi-threads.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 优雅关闭和资源清理 (advance-practice1/graceful-shutdown.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 进阶实战2: 实现一个简单 Redis (advance-practice/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading tokio 概览 (advance-practice/overview.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 使用初印象 (advance-practice/getting-startted.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 创建异步任务 (advance-practice/spawning.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 共享状态 (advance-practice/shared-state.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 消息传递 (advance-practice/channels.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading I/O (advance-practice/io.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 解析数据帧 (advance-practice/frame.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 深入 async (advance-practice/async.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading select (advance-practice/select.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 类似迭代器的 Stream (advance-practice/stream.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 优雅的关闭 (advance-practice/graceful-shutdown.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 异步跟同步共存 (advance-practice/bridging-with-sync.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading Rust 难点攻关 (difficulties/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 切片和切片引用 (difficulties/slice.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading Eq 和 PartialEq (difficulties/eq.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading String、&str 和 str TODO (difficulties/string.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 作用域、生命周期和 NLL TODO (difficulties/lifetime.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading move、Copy 和 Clone TODO (difficulties/move-copy.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 裸指针、引用和智能指针 TODO (advance/difficulties/pointer.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 自动化测试 (test/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 编写测试及控制执行 (test/write-tests.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 单元测试和集成测试 (test/unit-integration-test.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 断言 assertion (test/assertion.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 用 GitHub Actions 进行持续集成 (test/ci.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 基准测试 benchmark (test/benchmark.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading Cargo 使用指南 (cargo/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 上手使用 (cargo/getting-started.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 基础指南 (cargo/guide/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 为何会有 Cargo (cargo/guide/why-exist.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 下载并构建 Package (cargo/guide/download-package.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 添加依赖 (cargo/guide/dependencies.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading Package 目录结构 (cargo/guide/package-layout.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading Cargo.toml vs Cargo.lock (cargo/guide/cargo-toml-lock.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 测试和 CI (cargo/guide/tests-ci.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading Cargo 缓存 (cargo/guide/cargo-cache.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading Build 缓存 (cargo/guide/build-cache.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 进阶指南 (cargo/reference/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 指定依赖项 (cargo/reference/specify-deps.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 依赖覆盖 (cargo/reference/deps-overriding.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading Cargo.toml 清单详解 (cargo/reference/manifest.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading Cargo Target (cargo/reference/cargo-target.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 工作空间 Workspace (cargo/reference/workspaces.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 条件编译 Features (cargo/reference/features/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading Features 示例 (cargo/reference/features/examples.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 发布配置 Profile (cargo/reference/profiles.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 通过 config.toml 对 Cargo 进行配置 (cargo/reference/configuration.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 发布到 crates.io (cargo/reference/publishing-on-crates.io.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 构建脚本 build.rs (cargo/reference/build-script/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 构建脚本示例 (cargo/reference/build-script/examples.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 企业落地实践 (usecases/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading AWS 为何这么喜欢 Rust? (usecases/aws-rust.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 日志和监控 (logs/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 日志详解 (logs/about-log.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 日志门面 log (logs/log.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 使用 tracing 记录日志 (logs/tracing.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 自定义 tracing 的输出格式 (logs/tracing-logger.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 监控 (logs/observe/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 可观测性 (logs/observe/about-observe.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 分布式追踪 (logs/observe/trace.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading Rust 最佳实践 (practice/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 日常开发三方库精选 (practice/third-party-libs.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 命名规范 (practice/naming.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 面试经验 (practice/interview.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 代码开发实践 todo (practice/best-pratice.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 手把手带你实现链表 (too-many-lists/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 我们到底需不需要链表 (too-many-lists/do-we-need-it.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 不太优秀的单向链表:栈 (too-many-lists/bad-stack/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 数据布局 (too-many-lists/bad-stack/layout.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 基本操作 (too-many-lists/bad-stack/basic-operations.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 最后实现 (too-many-lists/bad-stack/final-code.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 还可以的单向链表 (too-many-lists/ok-stack/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 优化类型定义 (too-many-lists/ok-stack/type-optimizing.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 定义 Peek 函数 (too-many-lists/ok-stack/peek.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading IntoIter 和 Iter (too-many-lists/ok-stack/iter.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading IterMut 以及完整代码 (too-many-lists/ok-stack/itermut.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 持久化单向链表 (too-many-lists/persistent-stack/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 数据布局和基本操作 (too-many-lists/persistent-stack/layout.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading Drop、Arc 及完整代码 (too-many-lists/persistent-stack/drop-arc.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 不咋样的双端队列 (too-many-lists/deque/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 数据布局和基本操作 (too-many-lists/deque/layout.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading Peek (too-many-lists/deque/peek.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 基本操作的对称镜像 (too-many-lists/deque/symmetric.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 迭代器 (too-many-lists/deque/iterator.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 最终代码 (too-many-lists/deque/final-code.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 不错的 unsafe 队列 (too-many-lists/unsafe-queue/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 数据布局 (too-many-lists/unsafe-queue/layout.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 基本操作 (too-many-lists/unsafe-queue/basics.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading Miri (too-many-lists/unsafe-queue/miri.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 栈借用 (too-many-lists/unsafe-queue/stacked-borrow.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 测试栈借用 (too-many-lists/unsafe-queue/testing-stacked-borrow.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 数据布局 2 (too-many-lists/unsafe-queue/layout2.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 额外的操作 (too-many-lists/unsafe-queue/extra-junk.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 最终代码 (too-many-lists/unsafe-queue/final-code.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 生产级的双向 unsafe 队列 (too-many-lists/production-unsafe-deque/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 数据布局 (too-many-lists/production-unsafe-deque/layout.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 型变与子类型 (too-many-lists/production-unsafe-deque/variance-and-phantomData.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 基础结构 (too-many-lists/production-unsafe-deque/basics.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 恐慌与安全 (too-many-lists/production-unsafe-deque/drop-and-panic-safety.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 无聊的组合 (too-many-lists/production-unsafe-deque/boring-combinatorics.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 其它特征 (too-many-lists/production-unsafe-deque/filling-in-random-bits.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 测试 (too-many-lists/production-unsafe-deque/testing.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading Send,Sync和编译测试 (too-many-lists/production-unsafe-deque/send-sync-and-compile-tests.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 实现游标 (too-many-lists/production-unsafe-deque/implementing-cursors.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 测试游标 (too-many-lists/production-unsafe-deque/testing-cursors.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 最终代码 (too-many-lists/production-unsafe-deque/final-code.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 使用高级技巧实现链表 (too-many-lists/advanced-lists/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 双单向链表 (too-many-lists/advanced-lists/double-singly.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 栈上的链表 (too-many-lists/advanced-lists/stack-allocated.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 征服编译错误 (compiler/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 对抗编译检查 (compiler/fight-with-compiler/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 生命周期 (compiler/fight-with-compiler/lifetime/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 生命周期过大-01 (compiler/fight-with-compiler/lifetime/too-long1.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 生命周期过大-02 (compiler/fight-with-compiler/lifetime/too-long2.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 循环中的生命周期 (compiler/fight-with-compiler/lifetime/loop.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 闭包碰到特征对象-01 (compiler/fight-with-compiler/lifetime/closure-with-static.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 重复借用 (compiler/fight-with-compiler/borrowing/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 同时在函数内外使用引用 (compiler/fight-with-compiler/borrowing/ref-exist-in-out-fn.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 智能指针引起的重复借用错误 (compiler/fight-with-compiler/borrowing/borrow-distinct-fields-of-struct.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 类型未限制(todo) (compiler/fight-with-compiler/unconstrained.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 幽灵数据(todo) (compiler/fight-with-compiler/phantom-data.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading Rust 常见陷阱 (compiler/pitfalls/index.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading for 循环中使用外部数组 (compiler/pitfalls/use-vec-in-for.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 线程类型导致的栈溢出 (compiler/pitfalls/stack-overflow.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 算术溢出导致的 panic (compiler/pitfalls/arithmetic-overflow.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 闭包中奇怪的生命周期 (compiler/pitfalls/closure-with-lifetime.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 可变变量不可变? (compiler/pitfalls/the-disabled-mutability.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 可变借用失败引发的深入思考 (compiler/pitfalls/multiple-mutable-references.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 不太勤快的迭代器 (compiler/pitfalls/lazy-iterators.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 奇怪的序列 x..y (compiler/pitfalls/weird-ranges.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 无处不在的迭代器 (compiler/pitfalls/iterator-everywhere.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 线程间传递消息导致主线程无法结束 (compiler/pitfalls/main-with-channel-blocked.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 警惕 UTF-8 引发的性能隐患 (compiler/pitfalls/utf8-performance.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading Rust 性能优化 todo (profiling/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 深入内存 todo (profiling/memory/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 指针和引用 todo (profiling/memory/pointer-ref.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 未初始化内存 todo (profiling/memory/uninit.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 内存分配 todo (profiling/memory/allocation.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 内存布局 todo (profiling/memory/layout.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 虚拟内存 todo (profiling/memory/virtual.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 性能调优 doing (profiling/performance/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 字符串操作性能 (profiling/performance/string.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 深入理解 move (profiling/performance/deep-into-move.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 糟糕的提前优化 todo (profiling/performance/early-optimise.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading Clone 和 Copy todo (profiling/performance/clone-copy.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 减少 Runtime check(todo) (profiling/performance/runtime-check.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading CPU 缓存性能优化 todo (profiling/performance/cpu-cache.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 计算性能优化 todo (profiling/performance/calculate.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 堆和栈 todo (profiling/performance/heap-stack.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 内存 allocator todo (profiling/performance/allocator.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 常用性能测试工具 todo (profiling/performance/tools.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading Enum 内存优化 todo (profiling/performance/enum.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 编译优化 todo (profiling/compiler/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading LLVM todo (profiling/compiler/llvm.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 常见属性标记 todo (profiling/compiler/attributes.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 提升编译速度 todo (profiling/compiler/speed-up.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 编译器优化 todo (profiling/compiler/optimization/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading Option 枚举 todo (profiling/compiler/optimization/option.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 关键字 (appendix/keywords.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 运算符与符号 (appendix/operators.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 表达式 (appendix/expressions.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 派生特征 trait (appendix/derive.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading prelude 模块 todo (appendix/prelude.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading Rust 版本说明 (appendix/rust-version.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading Rust 历次版本更新解读 (appendix/rust-versions/intro.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 1.58 (appendix/rust-versions/1.58.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 1.59 (appendix/rust-versions/1.59.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 1.60 (appendix/rust-versions/1.60.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 1.61 (appendix/rust-versions/1.61.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 1.62 (appendix/rust-versions/1.62.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 1.63 (appendix/rust-versions/1.63.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 1.64 (appendix/rust-versions/1.64.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 1.65 (appendix/rust-versions/1.65.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 1.66 (appendix/rust-versions/1.66.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 1.67 (appendix/rust-versions/1.67.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 1.68 (appendix/rust-versions/1.68.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 1.69 (appendix/rust-versions/1.69.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 1.70 (appendix/rust-versions/1.70.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 1.71 (appendix/rust-versions/1.71.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 1.72 (appendix/rust-versions/1.72.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 1.73 (appendix/rust-versions/1.73.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 1.74 (appendix/rust-versions/1.74.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 1.75 (appendix/rust-versions/1.75.md) [2024-03-23T18:18:34Z DEBUG mdbook::book::book] Loading 1.76 (appendix/rust-versions/1.76.md)

[2024-03-23T18:18:34Z DEBUG mdbook_epub] EPUB book destination folder is : ".\\book\\epub"
[2024-03-23T18:18:34Z DEBUG mdbook_epub] EPUB book config is : Config { book: BookConfig { title: Some("Rust语言圣经(Rust Course)"), authors: ["sunface"], description: None, src: "src", multilingual: false, language: Some("zh-CN"), text_direction: None }, build: BuildConfig { build_dir: "book", create_missing: true, use_default_preprocessors: true, extra_watch_dirs: [] }, rust: RustConfig { edition: Some(E2021) }, rest: Table({"output": Table({"epub": Table({}), "html": Table({"additional-css": Array([String("theme/style.css")]), "additional-js": Array([String("assets/custom.js"), String("assets/bigPicture.js")]), "edit-url-template": String("https://github.com/sunface/rust-course/edit/main/{path}"), "fold": Table({"enable": Boolean(true), "level": Integer(0)}), "git-repository-url": String("https://github.com/sunface/rust-course"), "playground": Table({"copy-js": Boolean(true), "editable": Boolean(true)})})})}) }
[2024-03-23T18:18:34Z INFO  mdbook_epub] Starting the EPUB generator
[2024-03-23T18:18:34Z DEBUG mdbook_epub] Path to epub file: 'File { handle: 0x100, path: "\\\\?\\C:\\Users\\inksn\\Downloads\\Compressed\\rust-course-main\\book\\epub\\Rust语言圣经(Rust Course).epub" }'
[2024-03-23T18:18:34Z INFO  mdbook_epub::generator] Generating the EPUB book
[2024-03-23T18:18:34Z INFO  mdbook_epub::generator] 1. populate metadata ==
[2024-03-23T18:18:34Z INFO  mdbook_epub::generator] 2. find assets ==
[2024-03-23T18:18:34Z DEBUG mdbook_epub::resources::resource] Finding resources by:
    Config { book: BookConfig { title: Some("Rust语言圣经(Rust Course)"), authors: ["sunface"], description: None, src: "src", multilingual: false, language: Some("zh-CN"), text_direction: None }, build: BuildConfig { build_dir: "book", create_missing: true, use_default_preprocessors: true, extra_watch_dirs: [] }, rust: RustConfig { edition: Some(E2021) }, rest: Table({"output": Table({"epub": Table({}), "html": Table({"additional-css": Array([String("theme/style.css")]), "additional-js": Array([String("assets/custom.js"), String("assets/bigPicture.js")]), "edit-url-template": String("https://github.com/sunface/rust-course/edit/main/{path}"), "fold": Table({"enable": Boolean(true), "level": Integer(0)}), "git-repository-url": String("https://github.com/sunface/rust-course"), "playground": Table({"copy-js": Boolean(true), "editable": Boolean(true)})})})}) }
[2024-03-23T18:18:34Z DEBUG mdbook_epub::resources::resource] Start iteration over a [37] sections in src_dir = "\\\\?\\C:\\Users\\inksn\\Downloads\\Compressed\\rust-course-main\\src"
[2024-03-23T18:18:34Z DEBUG mdbook_epub::resources::resource] Searching links and assets for: '关于本书'
thread 'main' panicked at C:\Users\inksn\.cargo\registry\src\index.crates.io-6f17d22bba15001f\mdbook-epub-0.4.37\src\utils.rs:53:28:
Unable to extract file ext from https://avatars.githubusercontent.com/u/100085326?v=4?s=100
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
blandger commented 6 months ago

The problem is....

Unable to extract file ext from https://avatars.githubusercontent.com/u/100085326?v=4?s=100

We have a simple code for downloading remote resources but it can't extract gif file using that parametrized link. I'm not sure if that gif is important in book.

There are the ways you can try to go on....

That would be fastest way to proceed because parametrized urls/resources can't be properly fetched now.

Initsnow commented 6 months ago

generated a python script to do that

import os
import re
import requests
import imghdr  # 引入 imghdr 模块
from threading import Thread
from queue import Queue

def download_img(src_url, local_folder, relative_folder):
    # 获取文件名
    filename = os.path.basename(src_url)
    filename = re.sub(r'[^\w\-_\.]', '_', filename)

    # 检测图片类型并自动添加后缀
    response = requests.get(src_url)
    if response.status_code == 200:
        image_type = imghdr.what(None, h=response.content)
        if image_type:
            filename = f"{filename}.{image_type}"
        else:
            print(f"无法确定图片类型: {src_url}")
            return None

        # 拼接本地路径
        local_path = os.path.join(relative_folder, local_folder, filename)

        # 确保文件夹存在
        os.makedirs(os.path.dirname(local_path), exist_ok=True)

        # 写入本地文件
        with open(local_path, 'wb') as f:
            f.write(response.content)
        print(f"图片下载成功: {local_path}")
        return os.path.join(local_folder, filename)
    else:
        print(f"图片下载失败: {src_url}")
        return None

def download_img_thread(img_url, img_folder, relative_folder, result_queue):
    try:
        local_img_path = download_img(img_url, img_folder, relative_folder)
        if local_img_path:
            result_queue.put((img_url, local_img_path))
        else:
            result_queue.put((img_url, None))
    except Exception as e:
        print(f"下载图片时出错: {e}")
        result_queue.put((img_url, None))

def process_summary_file(summary_path, img_folder):
    # 读取 SUMMARY.md 文件内容
    with open(summary_path, 'r', encoding='utf-8') as file:
        summary_content = file.read()

    # 使用正则表达式提取括号内的文件名,忽略注释部分
    file_names = re.findall(r'\((.*?)\)', summary_content)

    # 遍历文件名并处理对应文件
    for file_name in file_names:
        file_path = os.path.join(os.path.dirname(summary_path), file_name.strip())  # 移除可能存在的空白字符
        if os.path.isfile(file_path) and not file_name.strip().startswith('<!--') and not file_name.strip().endswith('-->'):
            process_file(file_path, img_folder, os.path.dirname(file_name.strip()))

def process_file(file_path, img_folder, relative_folder):
    # 读取文件内容
    with open(file_path, 'r', encoding='utf-8') as file:
        file_content = file.read()

    # 使用正则表达式提取<img>标签内的src属性
    img_src_regex = r'<img\s+src\s*=\s*"(.*?)"'
    img_urls = re.findall(img_src_regex, file_content)

    # 使用多线程下载图片,并替换为本地路径
    result_queue = Queue()
    threads = []
    for img_url in img_urls:
        thread = Thread(target=download_img_thread, args=(img_url, img_folder, relative_folder, result_queue))
        thread.start()
        threads.append(thread)

    # 等待所有线程完成,并获取本地路径
    for thread in threads:
        thread.join()

    img_url_to_local_path = {}
    while not result_queue.empty():
        img_url, local_img_path = result_queue.get()
        img_url_to_local_path[img_url] = local_img_path

    # 替换文件中的远程路径为本地路径
    for img_url, local_img_path in img_url_to_local_path.items():
        if local_img_path:
            file_content = file_content.replace(img_url, local_img_path)

    # 将处理后的内容写回文件
    with open(file_path, 'w', encoding='utf-8') as file:
        file.write(file_content)

if __name__ == "__main__":
    # 运行目录下的 SUMMARY.md 文件路径
    summary_file_path = "SUMMARY.md"
    # 图片保存的文件夹路径
    img_folder_path = "img"

    # 如果图片保存文件夹不存在,则创建
    if not os.path.exists(img_folder_path):
        os.makedirs(img_folder_path)

    # 处理 SUMMARY.md 文件
    process_summary_file(summary_file_path, img_folder_path)
blandger commented 6 months ago

@Initsnow Btw, you can try to use latest code from master and check your problem again. I've made some changes yesterday and hope you won't need url replacement anymore. It would be helpful to check if possible. Thanks.

Initsnow commented 6 months ago

@Initsnow Btw, you can try to use latest code from master and check your problem again. I've made some changes yesterday and hope you won't need url replacement anymore. It would be helpful to check if possible. Thanks.

EPUB can now be generated👍, but links containing Chinese cannot be processed.

Running mdbook-epub as standalone app...
thread 'main' panicked at src\generator.rs:460:29:
internal error: entered unreachable code: https://github.com/sunface/rust-course/blob/main/assets/studyrust公众号.png?raw=true should be replaced, but it doesn't.
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

<img src="https://github.com/sunface/rust-course/blob/main/assets/studyrust公众号.png?raw=true" />

blandger commented 6 months ago

@Initsnow

links containing Chinese cannot be processed.

Pls create separate issue for that with error from log. I will try to solve. Thanks.