-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscripts\build_docs.ps1
More file actions
84 lines (72 loc) · 3.19 KB
/
Copy pathscripts\build_docs.ps1
File metadata and controls
84 lines (72 loc) · 3.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# =============================================================================
# build_docs.ps1
# =============================================================================
# Convierte los archivos Markdown del proyecto a DOCX y a PDF usando pandoc.
#
# Requisitos:
# - pandoc instalado: winget install --id JohnMacFarlane.Pandoc -e
# - wkhtmltopdf instalado: winget install --id wkhtmltopdf.wkhtmltox -e
#
# Uso:
# En PowerShell, desde la raíz del proyecto:
# .\scripts\build_docs.ps1
#
# Resultado:
# Para cada .md, genera el .docx y el .pdf al lado.
# =============================================================================
# Importante: usamos "Continue" en vez de "Stop" porque wkhtmltopdf escribe
# su progreso por stderr (cosas como "Loading pages (1/6)") y PowerShell 5.1
# trataría esos mensajes como errores si estuviera en modo Stop.
$ErrorActionPreference = "Continue"
# Vamos a la raíz del proyecto (un nivel arriba de scripts\).
$raiz = Split-Path -Parent $PSScriptRoot
Set-Location $raiz
Write-Host "Trabajando desde: $raiz" -ForegroundColor Cyan
# Verificación previa: ¿está pandoc disponible?
if (-not (Get-Command pandoc -ErrorAction SilentlyContinue)) {
Write-Host "ERROR: pandoc no está instalado o no está en el PATH." -ForegroundColor Red
Write-Host "Instálalo con: winget install --id JohnMacFarlane.Pandoc -e" -ForegroundColor Yellow
exit 1
}
# wkhtmltopdf es opcional — si no está, saltamos la conversión a PDF
$tieneWkhtml = $false
if (Get-Command wkhtmltopdf -ErrorAction SilentlyContinue) {
$tieneWkhtml = $true
} else {
Write-Host "AVISO: wkhtmltopdf no encontrado. Se generarán DOCX pero no PDF." -ForegroundColor Yellow
Write-Host " Para instalarlo: winget install --id wkhtmltopdf.wkhtmltox -e" -ForegroundColor Yellow
}
# Lista de archivos a convertir: README.md (en raíz) + todos los docs/*.md
$archivosMd = @()
if (Test-Path "README.md") { $archivosMd += "README.md" }
$archivosMd += Get-ChildItem -Path "docs" -Filter "*.md" -File | ForEach-Object { $_.FullName }
if ($archivosMd.Count -eq 0) {
Write-Host "No se encontró ningún .md para convertir." -ForegroundColor Yellow
exit 0
}
Write-Host "Archivos a convertir: $($archivosMd.Count)" -ForegroundColor Cyan
foreach ($md in $archivosMd) {
$nombreBase = [System.IO.Path]::ChangeExtension($md, $null).TrimEnd('.')
$docx = "$nombreBase.docx"
$pdf = "$nombreBase.pdf"
Write-Host " -> $md" -ForegroundColor White
# MD -> DOCX
# Lo invocamos vía cmd.exe para que PowerShell no interprete stderr.
cmd /c "pandoc `"$md`" -o `"$docx`" 2>nul"
if (Test-Path $docx) {
Write-Host " [OK] $docx" -ForegroundColor Green
} else {
Write-Host " [WARN] No se generó $docx" -ForegroundColor Yellow
}
# MD -> PDF (solo si tenemos wkhtmltopdf)
if ($tieneWkhtml) {
cmd /c "pandoc `"$md`" -o `"$pdf`" --pdf-engine=wkhtmltopdf 2>nul"
if (Test-Path $pdf) {
Write-Host " [OK] $pdf" -ForegroundColor Green
} else {
Write-Host " [WARN] No se generó $pdf" -ForegroundColor Yellow
}
}
}
Write-Host ""
Write-Host "Conversión terminada." -ForegroundColor Cyan