void HtmlPrettyPrintTest() { size_t lenOut; AutoFree data; data.Set(PrettyPrintHtml("<p><b>Test</b></p>", (size_t)-1, lenOut)); utassert(str::Len(data) == lenOut && str::Eq(data, "<p><b>Test</b></p>\n")); data.Set(PrettyPrintHtml("<p><b>Test</p>", (size_t)-1, lenOut)); utassert(str::Len(data) == lenOut && str::Eq(data, "<p><b>Test</p>\n")); data.Set(PrettyPrintHtml("<html><body><p>Content</p></body></html>", (size_t)-1, lenOut)); utassert(str::Len(data) == lenOut && str::Eq(data, "<html>\n\t<body>\n\t\t<p>Content</p>\n\t</body>\n</html>\n")); data.Set(PrettyPrintHtml("<html><body><p>Content</html></body>", (size_t)-1, lenOut)); // TODO: add newline before non-matching </html> ? // TODO: insert missing closing tags (</p> and </body>)? utassert(str::Len(data) == lenOut && str::Eq(data, "<html>\n\t<body>\n\t\t<p>Content</html>\n</body>\n")); data.Set(PrettyPrintHtml("<p attr=' value '><b> bold text </b> </p>", (size_t)-1, lenOut)); // TODO: normalize whitespace? utassert(str::Len(data) == lenOut && str::Eq(data, "<p attr=' value '><b> bold text </b></p>\n")); }
static void MobiSaveHtml(const WCHAR *filePathBase, MobiDoc *mb) { CrashAlwaysIf(!gSaveHtml); ScopedMem<WCHAR> outFile(str::Join(filePathBase, L"_pp.html")); size_t htmlLen; const char *html = mb->GetHtmlData(htmlLen); size_t ppHtmlLen; char *ppHtml = PrettyPrintHtml(html, htmlLen, ppHtmlLen); file::WriteAll(outFile.Get(), ppHtml, ppHtmlLen); outFile.Set(str::Join(filePathBase, L".html")); file::WriteAll(outFile.Get(), html, htmlLen); }