Expand description
§Timetable Core Library
This library provides functionality for parsing Bromcom PDF timetables and generating formatted SVG visualizations with color-coded department maps.
§Features
- Parse Bromcom timetable PDFs using coordinate-based text extraction
- Configure room-to-department mappings with customizable colors
- Apply per-week/day/period overrides to correct parsing errors
- Highlight school map SVGs based on department locations
- Render A4-sized SVG timetables with embedded maps
§Example Usage
use timetable_core::{config::Config, parser::parse_pdf, renderer::render_timetable, processor::{process_map, MapHighlight}};
use std::path::Path;
use std::collections::HashSet;
// Load configuration
let config = Config::load(Path::new("config.toml"))?;
// Parse PDF timetable
let mut weeks = parse_pdf(Path::new("input/timetable.pdf"))?;
// Apply overrides from config
config.apply_overrides(&mut weeks);
// Render each week to SVG
for (i, week) in weeks.iter().enumerate() {
// Build highlights for departments used in this week
let mut highlights = Vec::new();
let mut seen_ids = HashSet::new();
for lesson in &week.lessons {
if let Some(mapping) = config.get_style_for_room(&lesson.room) {
if seen_ids.insert(mapping.map_id.clone()) {
highlights.push(MapHighlight {
id: mapping.map_id.clone(),
color: mapping.bg_color.clone(),
});
}
}
}
// Process school map with highlights
let map_svg = process_map(Path::new("resources/map.svg"), &highlights)?;
// Render to output file
let output_path = format!("output/week_{}.svg", i + 1);
render_timetable(week, &config, &map_svg, Path::new(&output_path))?;
}§Modules
Modules§
- config
- Configuration management for timetable formatting.
- parser
- PDF parsing for Bromcom timetables.
- processor
- SVG map processing and department highlighting.
- renderer
- SVG timetable rendering with embedded maps.