diff options
Diffstat (limited to 'src/main.zig')
| -rw-r--r-- | src/main.zig | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/main.zig b/src/main.zig index a6bbe31..e9a9fa1 100644 --- a/src/main.zig +++ b/src/main.zig @@ -70,10 +70,19 @@ fn buildVersion( const page = try fetch.get(gpa, client, v.docs_url); defer gpa.free(page); - const xhtml = try html.toXhtml(gpa, page); - defer gpa.free(xhtml); + var doc = try html.transform(gpa, page); + defer doc.deinit(); - const bytes = try epub.build(gpa, .{ .title = title, .version = v.name, .xhtml = xhtml }); + // Some older docs pages have malformed upstream HTML that can't be repaired + // without a full HTML5 tree-builder; skip them rather than emit invalid EPUB3. + if (!html.isWellFormed(doc.content)) return error.NotWellFormed; + + const bytes = try epub.build(gpa, .{ + .title = title, + .version = v.name, + .xhtml = doc.content, + .toc = doc.toc, + }); defer gpa.free(bytes); assert(std.mem.startsWith(u8, bytes, "PK")); |
