This document provides a technical view on the project.
This project is written in Rust.
cd code
cargo run <arguments>| Argument | Description |
|---|---|
preprocess |
Process raw data into typed structures |
dots |
Generate GraphViz DOT diagram files |
pages |
Generate markdown pages |
table |
Generate relation tables |
api |
Generate JSON API |
clear |
Clear output directories |
fast |
Shortcut: clear + preprocess + dots + pages |
all |
Full generation |
debug / trace |
Enable verbose logging |
interactive / i |
Enter interactive command mode |
Data flows through 5 layers:
COLLECTION (src/collection.rs) Database parameter definitions
↓
INPUT (src/input/) Raw data structures, raw data builder
↓
WORK (src/work/) Processing, relation inference, hierarchy computation
↓
DATA (src/data/) Core typed structures (Parameter, Relation, etc.)
↓
OUTPUT (src/output/) Markdown pages, API JSON, DOT diagrams, tables
-
collection.rs- The database itself. All graph classes, parameters, tags, relations, and bibliographic sources are defined here using theCollectionBuilderAPI. This is the primary file for adding/modifying data. -
input/build.rs-CollectionBuilderprovides methods liketag(),parameter(),graph_class(),source()for building the database. -
data/id.rs- Strongly-typed ID system (e.g.,ParameterId,GraphClassId) preventing ID confusion. -
data/data.rs- CoreDatastruct containing all processed parameters, relations, and metadata. -
work/processing.rs- Main processing pipeline transforming raw data into typed structures. -
output/markdown.rs- Primary page content generation.
- Parameter - A graph parameter (e.g., treewidth, pathwidth)
- Relation - A bound between parameters (e.g.,
treewidth ≤ pathwidth) - GraphClass - A class of graphs (e.g., planar graphs)
- Source - Bibliography reference linking to
handcrafted/main.bib - Tag - Categorization for parameters and graph classes
Output goes to ../web/content/:
- Pages:
../web/content/html/ - API:
../web/content/api/ - Processing cache:
/tmp/tmp/data.json