Adding files.
This commit is contained in:
74
modules/export.py
Normal file
74
modules/export.py
Normal file
@@ -0,0 +1,74 @@
|
||||
import os
|
||||
import markdown
|
||||
from docx import Document
|
||||
from ebooklib import epub
|
||||
from . import utils
|
||||
|
||||
def create_readme(folder, bp):
|
||||
meta = bp['book_metadata']
|
||||
ls = bp['length_settings']
|
||||
content = f"""# {meta['title']}\n**Generated by BookApp**\n\n## Stats Used\n- **Type:** {ls.get('label', 'Custom')}\n- **Planned Chapters:** {ls['chapters']}\n- **Logic Depth:** {ls['depth']}\n- **Target Words:** {ls.get('words', 'Unknown')}"""
|
||||
with open(os.path.join(folder, "README.md"), "w") as f: f.write(content)
|
||||
|
||||
def compile_files(bp, ms, folder):
|
||||
utils.log("SYSTEM", "Compiling EPUB and DOCX...")
|
||||
meta = bp.get('book_metadata', {})
|
||||
title = meta.get('title', 'Untitled')
|
||||
|
||||
if meta.get('filename'):
|
||||
safe = meta['filename']
|
||||
else:
|
||||
safe = "".join([c for c in title if c.isalnum() or c=='_']).replace(" ", "_")
|
||||
|
||||
doc = Document(); doc.add_heading(title, 0)
|
||||
book = epub.EpubBook(); book.set_title(title); spine = ['nav']
|
||||
|
||||
# Add Cover if exists
|
||||
cover_path = os.path.join(folder, "cover.png")
|
||||
if os.path.exists(cover_path):
|
||||
with open(cover_path, 'rb') as f:
|
||||
book.set_cover("cover.png", f.read())
|
||||
|
||||
for c in ms:
|
||||
# Determine filename/type
|
||||
num_str = str(c['num']).lower()
|
||||
if num_str == '0' or 'prologue' in num_str:
|
||||
filename = "prologue.xhtml"
|
||||
default_header = f"Prologue: {c['title']}"
|
||||
elif 'epilogue' in num_str:
|
||||
filename = "epilogue.xhtml"
|
||||
default_header = f"Epilogue: {c['title']}"
|
||||
else:
|
||||
filename = f"ch_{c['num']}.xhtml"
|
||||
default_header = f"Ch {c['num']}: {c['title']}"
|
||||
|
||||
# Check for AI-generated header in content
|
||||
content = c['content'].strip()
|
||||
clean_content = content.replace("```markdown", "").replace("```", "").strip()
|
||||
lines = clean_content.split('\n')
|
||||
|
||||
ai_header = None
|
||||
body_content = clean_content
|
||||
|
||||
if lines and lines[0].strip().startswith('# '):
|
||||
ai_header = lines[0].strip().replace('#', '').strip()
|
||||
header = ai_header
|
||||
body_content = "\n".join(lines[1:]).strip()
|
||||
else:
|
||||
header = default_header
|
||||
|
||||
doc.add_heading(header, 1)
|
||||
doc.add_paragraph(body_content)
|
||||
|
||||
ch = epub.EpubHtml(title=header, file_name=filename)
|
||||
|
||||
clean_content = clean_content.replace(f"{folder}\\", "").replace(f"{folder}/", "")
|
||||
html_content = markdown.markdown(clean_content)
|
||||
ch.content = html_content if ai_header else f"<h1>{header}</h1>{html_content}"
|
||||
|
||||
book.add_item(ch); spine.append(ch)
|
||||
|
||||
doc.save(os.path.join(folder, f"{safe}.docx"))
|
||||
book.spine = spine; book.add_item(epub.EpubNcx()); book.add_item(epub.EpubNav())
|
||||
epub.write_epub(os.path.join(folder, f"{safe}.epub"), book, {})
|
||||
create_readme(folder, bp)
|
||||
Reference in New Issue
Block a user