Pikru Codebase Organization
Top-Level Structure
src/ - Main pikru library (parsing and rendering)
crates/ - Supporting crates
vendor/pikchr-c/ - Original C implementation and test files
examples/ - Example programs
tests/ - Integration tests
Main Library (src/)
Entry Point
src/lib.rs - Public API, exports key types and functions
Parsing
src/parse.rs - Parser implementation (statement parsing, token handling)
src/ast.rs - AST types (Statement, Expr, ObjectClass, etc.)
src/types.rs - Core types (ClassName, Direction, EdgePoint, etc.)
Rendering
src/render/mod.rs - Main renderer logic
- Object placement and geometry
- Text positioning (ljust/rjust logic at lines 1265-1550)
- Variable scope and context management
src/render/eval.rs - Expression evaluation (positions, scalars, variables)
src/render/svg.rs - SVG generation (converts shapes to SVG elements)
src/render/geometry.rs - Shape geometry (boxes, circles, paths, files)
src/render/shapes.rs - Shape rendering (specific shape implementations)
src/render/types.rs - Render types (PObject, Style, PositionedText, etc.)
src/render/path_builder.rs - Path construction (line/arrow building)
src/render/context.rs - Render context (variable scopes, state)
src/render/defaults.rs - Default values (line width, font size, etc.)
Error Handling
src/errors.rs - Error types and reporting
src/macros.rs - Helper macros
Supporting Crates
crates/pikru-compare/
SVG comparison utilities for testing
src/lib.rs - Core comparison logic
compare_outputs() - Main comparison function
CompareResult::is_match() - Determines if test passes
- Handles error matching, SVG parsing, tolerance
- Used by: test harness, MCP server
crates/pikru-mcp/
MCP server for test running
src/tools.rs - MCP tool implementations
run_pikru_test() - Run single test, returns comparison
list_pikru_tests() - List available tests
debug_pikru_test() - Run with trace output
src/main.rs - MCP server entry point
Test Files
Location
vendor/pikchr-c/tests/*.pikchr - Test input files from C implementation
Categories
test01-test81 - Numbered feature tests
autochop*.pikchr - Arrow chopping tests
- Other specialized tests
Common Debugging Paths
Text Positioning Issues
- Check
src/render/mod.rs:1265-1550 - ljust/rjust calculation
- Check
src/render/svg.rs:294 - Text anchor assignment
- Check
src/render/types.rs - PositionedText structure
Rendering Issues
- Check
src/render/shapes.rs - Shape-specific rendering
- Check
src/render/geometry.rs - Geometric calculations
- Check
src/render/svg.rs - SVG element generation
Parsing Issues
- Check
src/parse.rs - Parser logic
- Check
src/ast.rs - AST node definitions
Test Comparison Issues
- Check
crates/pikru-compare/src/lib.rs - Comparison logic
- Check tolerance constants (FLOAT_TOLERANCE, SIMILARITY_THRESHOLD)
Key Code References (cref comments)
Many functions include // cref: comments pointing to the original C implementation:
- Format:
// cref: function_name (pikchr.c:line_number)
- Use these to cross-reference with C implementation when debugging
1---2name: codebase-layout3description: Codebase organization for pikru. Use when you need to find where specific functionality lives.4---5
6# Pikru Codebase Organization
7
8## Top-Level Structure
9
10- `src/` - Main pikru library (parsing and rendering)
11- `crates/` - Supporting crates
12- `vendor/pikchr-c/` - Original C implementation and test files
13- `examples/` - Example programs
14- `tests/` - Integration tests
15
16## Main Library (`src/`)
17
18### Entry Point
19- `src/lib.rs` - Public API, exports key types and functions
20
21### Parsing
22- `src/parse.rs` - **Parser implementation** (statement parsing, token handling)
23- `src/ast.rs` - **AST types** (Statement, Expr, ObjectClass, etc.)
24- `src/types.rs` - **Core types** (ClassName, Direction, EdgePoint, etc.)
25
26### Rendering
27- `src/render/mod.rs` - **Main renderer logic**
28 - Object placement and geometry
29 - Text positioning (**ljust/rjust logic at lines 1265-1550**)
30 - Variable scope and context management
31- `src/render/eval.rs` - **Expression evaluation** (positions, scalars, variables)
32- `src/render/svg.rs` - **SVG generation** (converts shapes to SVG elements)
33- `src/render/geometry.rs` - **Shape geometry** (boxes, circles, paths, files)
34- `src/render/shapes.rs` - **Shape rendering** (specific shape implementations)
35- `src/render/types.rs` - **Render types** (PObject, Style, PositionedText, etc.)
36- `src/render/path_builder.rs` - **Path construction** (line/arrow building)
37- `src/render/context.rs` - **Render context** (variable scopes, state)
38- `src/render/defaults.rs` - **Default values** (line width, font size, etc.)
39
40### Error Handling
41- `src/errors.rs` - Error types and reporting
42- `src/macros.rs` - Helper macros
43
44## Supporting Crates
45
46### `crates/pikru-compare/`
47**SVG comparison utilities for testing**
48- `src/lib.rs` - Core comparison logic
49 - `compare_outputs()` - **Main comparison function**
50 - `CompareResult::is_match()` - Determines if test passes
51 - Handles error matching, SVG parsing, tolerance
52- Used by: test harness, MCP server
53
54### `crates/pikru-mcp/`
55**MCP server for test running**
56- `src/tools.rs` - MCP tool implementations
57 - `run_pikru_test()` - Run single test, returns comparison
58 - `list_pikru_tests()` - List available tests
59 - `debug_pikru_test()` - Run with trace output
60- `src/main.rs` - MCP server entry point
61
62## Test Files
63
64### Location
65`vendor/pikchr-c/tests/*.pikchr` - Test input files from C implementation
66
67### Categories
68- `test01`-`test81` - Numbered feature tests
69- `autochop*.pikchr` - Arrow chopping tests
70- Other specialized tests
71
72## Common Debugging Paths
73
74### Text Positioning Issues
751. Check `src/render/mod.rs:1265-1550` - ljust/rjust calculation
762. Check `src/render/svg.rs:294` - Text anchor assignment
773. Check `src/render/types.rs` - PositionedText structure
78
79### Rendering Issues
801. Check `src/render/shapes.rs` - Shape-specific rendering
812. Check `src/render/geometry.rs` - Geometric calculations
823. Check `src/render/svg.rs` - SVG element generation
83
84### Parsing Issues
851. Check `src/parse.rs` - Parser logic
862. Check `src/ast.rs` - AST node definitions
87
88### Test Comparison Issues
891. Check `crates/pikru-compare/src/lib.rs` - Comparison logic
902. Check tolerance constants (FLOAT_TOLERANCE, SIMILARITY_THRESHOLD)
91
92## Key Code References (cref comments)
93
94Many functions include `// cref:` comments pointing to the original C implementation:
95- Format: `// cref: function_name (pikchr.c:line_number)`
96- Use these to cross-reference with C implementation when debugging