`;
resultsContainer.innerHTML += sentenceHtml;
});
downloadContainer.style.display = 'block';
}
/**
* Generates and downloads a professional PDF report of the analysis.
*/
function downloadPDF() {
if (!currentAnalysis) {
alert('No analysis available to download.');
return;
}
const { jsPDF } = window.jspdf;
const doc = new jsPDF();
const pageWidth = doc.internal.pageSize.getWidth();
const margin = 15;
let finalY = 0;
// --- PDF Header ---
doc.setFillColor(37, 99, 235);
doc.rect(0, 0, pageWidth, 25, 'F');
doc.setTextColor(255, 255, 255);
doc.setFont('helvetica', 'bold');
doc.setFontSize(16);
doc.text('Language Syntax Analysis Report', pageWidth / 2, 15, { align: 'center' });
// --- Summary Section ---
doc.setFont('helvetica', 'bold');
doc.setTextColor(30, 41, 59);
doc.setFontSize(14);
doc.text('Analysis Summary', margin, 40);
doc.setFont('helvetica', 'normal');
doc.setFontSize(11);
const summaryLines = doc.splitTextToSize(currentAnalysis.summary, pageWidth - (margin * 2));
doc.text(summaryLines, margin, 48);
finalY = doc.lastAutoTable.finalY || 50 + summaryLines.length * 5;
// --- Detailed Breakdown ---
currentAnalysis.sentences.forEach((sentence, index) => {
finalY += 15; // Space before next section
doc.setFont('helvetica', 'bold');
doc.setFontSize(12);
doc.text(`Sentence ${index + 1}:`, margin, finalY);
doc.setFont('helvetica', 'italic');
doc.setTextColor(100, 116, 139);
doc.text(`"${sentence.text}"`, margin, finalY + 6);
doc.setTextColor(30, 41, 59); // Reset color
const tableBody = sentence.tokens.map(t => [t.text, t.pos, t.lemma, t.dependency]);
doc.autoTable({
startY: finalY + 10,
head: [['Token', 'Part of Speech', 'Lemma', 'Dependency']],
body: tableBody,
theme: 'grid',
headStyles: { fillColor: [59, 130, 246] },
didDrawPage: (data) => {
// Add footer to each page
doc.setFontSize(10);
doc.setTextColor(150);
doc.text(`Page ${doc.internal.getNumberOfPages()}`, pageWidth / 2, doc.internal.pageSize.getHeight() - 10, { align: 'center' });
}
});
finalY = doc.lastAutoTable.finalY;
});
doc.save('Syntax-Analysis-Report.pdf');
}
// --- Utility Functions ---
function showLoader() {
resultsContainer.innerHTML = '';
}
function hideLoader() {
const loader = resultsContainer.querySelector('.loader');
if (loader) loader.remove();
}
function clearResults() {
resultsContainer.innerHTML = '';
downloadContainer.style.display = 'none';
currentAnalysis = null;
}
function displayError(message) {
clearResults();
resultsContainer.innerHTML = `
${message}
`;
}
});
