import { PropositionalFormula, PropositionalArgument } from '../../../types.js';
import { TruthTableGenerator } from './TruthTableGenerator.js';
import { TruthTableEvaluator } from './TruthTableEvaluator.js';
import { TruthTableHTMLRenderer } from './TruthTableHTMLRenderer.js';
import { TruthTableTextRenderer } from './TruthTableTextRenderer.js';
import { TruthTableSVGRenderer } from './TruthTableSVGRenderer.js';
/**
* Truth Table Visualizer - Main orchestrator
* Coordinates truth table generation and rendering using specialized modules
*/
export class TruthTableVisualizer {
private generator: TruthTableGenerator;
private evaluator: TruthTableEvaluator;
private htmlRenderer: TruthTableHTMLRenderer;
private textRenderer: TruthTableTextRenderer;
private svgRenderer: TruthTableSVGRenderer;
constructor() {
this.generator = new TruthTableGenerator();
this.evaluator = new TruthTableEvaluator();
this.htmlRenderer = new TruthTableHTMLRenderer();
this.textRenderer = new TruthTableTextRenderer();
this.svgRenderer = new TruthTableSVGRenderer();
}
/**
* Generate a truth table for a propositional formula or argument
* @param input Formula or argument to visualize
* @param format Output format (html, text, svg)
* @returns Formatted truth table
*/
generateTruthTable(
input: PropositionalFormula | PropositionalArgument,
format: 'html' | 'text' | 'svg' = 'html'
): string {
// Generate table structure
const { formulas, variables, assignments, isArgument } =
this.generator.generateTableStructure(input);
// Evaluate formulas
const results = this.evaluator.evaluateFormulas(formulas, assignments);
// Calculate validity for arguments
let isArgumentValid: boolean | undefined;
if (isArgument) {
isArgumentValid = this.evaluator.isArgumentValid(results);
}
// Render based on format
switch (format) {
case 'html':
return this.htmlRenderer.render(
variables,
formulas,
assignments,
results,
isArgument,
isArgumentValid
);
case 'text':
return this.textRenderer.render(
variables,
formulas,
assignments,
results,
isArgument,
isArgumentValid
);
case 'svg':
return this.svgRenderer.render(
variables,
formulas,
assignments,
results,
isArgument,
isArgumentValid
);
default:
return this.htmlRenderer.render(
variables,
formulas,
assignments,
results,
isArgument,
isArgumentValid
);
}
}
}
// For backward compatibility, export the main class as EnhancedTruthTableVisualizer
export { TruthTableVisualizer as EnhancedTruthTableVisualizer };