diff --git a/.gitignore b/.gitignore index fd69c45f..9a71bb71 100644 --- a/.gitignore +++ b/.gitignore @@ -22,8 +22,9 @@ i18n/*.qph # Documentation /docs/build/ +/docs/source/locales/**/*.mo /novelwriter/assets/help/ -/novelwriter/assets/manual.pdf +/novelwriter/assets/manual*.pdf *.qch *.qhc .~lock.* diff --git a/docs/source/locales/authors_fr.conf b/docs/source/locales/authors_fr.conf new file mode 100644 index 00000000..08eaa7d9 --- /dev/null +++ b/docs/source/locales/authors_fr.conf @@ -0,0 +1,2 @@ +# French translation authors, one name per line +Karduin diff --git a/novelwriter/assets/manual_fr_FR.pdf b/novelwriter/assets/manual_fr_FR.pdf deleted file mode 100644 index b2ee5e21..00000000 Binary files a/novelwriter/assets/manual_fr_FR.pdf and /dev/null differ diff --git a/pkgutils.py b/pkgutils.py index cd097a7f..492b9a41 100755 --- a/pkgutils.py +++ b/pkgutils.py @@ -213,6 +213,12 @@ if __name__ == "__main__": cmdUpdateDocsPo.add_argument("lang", nargs="+") cmdUpdateDocsPo.set_defaults(func=utils.assets.updateDocsTranslationSources) + # Build Docs i18n Files + cmdBuildU18nDocs = parsers.add_parser( + "docs-lrelease", help="Build the translated PDF manual files." + ) + cmdBuildU18nDocs.set_defaults(func=utils.assets.buildDocsTranslationAssets) + # Build Manual cmdBuildManual = parsers.add_parser( "manual", help="Build the help documentation as a PDF (requires LaTeX)." diff --git a/utils/assets.py b/utils/assets.py index 902c0c20..0124aad4 100644 --- a/utils/assets.py +++ b/utils/assets.py @@ -21,6 +21,7 @@ along with this program. If not, see . from __future__ import annotations import argparse +import os import subprocess import sys import zipfile @@ -284,6 +285,39 @@ def updateDocsTranslationSources(args: argparse.Namespace) -> None: return +def buildDocsTranslationAssets(args: argparse.Namespace | None = None) -> None: + """Build the documentation i18n PDF files.""" + print("") + print("Building Docs Manuals") + print("=====================") + print("") + + docsDir = ROOT_DIR / "docs" + locsDir = ROOT_DIR / "docs" / "source" / "locales" + pdfFile = ROOT_DIR / "docs" / "build" / "latex" / "manual.pdf" + locsDir.mkdir(exist_ok=True) + + build = [i.stem for i in locsDir.iterdir() if i.is_dir()] + for code in build: + data = (locsDir / f"authors_{code}.conf").read_text(encoding="utf-8") + authors = [x for x in data.splitlines() if x and not x.startswith("#")] + env = os.environ.copy() + env["SPHINX_I18N_AUTHORS"] = ", ".join(authors) + exCode = subprocess.call( + f"make -e SPHINXOPTS=\"-D language='{code}'\" clean latexpdf", + cwd=docsDir, env=env, shell=True + ) + if exCode == 0: + print("") + pdfFile.rename(ROOT_DIR / "novelwriter" / "assets" / f"manual_{code}.pdf") + else: + raise Exception(f"Build returned error code {exCode}") + + print("") + + return + + def cleanBuiltAssets(args: argparse.Namespace | None = None) -> None: """Remove assets built by this script.""" print("")