///|
fn response_color(response : @evidence.TargetResponse) -> String {
match response {
CR => "#6f4fa0"
PR => "#247b68"
SD => "#34748a"
PD => "#b5473e"
NE => "#787b83"
}
}
///|
/// Self-contained SVG: target sum, baseline and baseline-minus-30% guides.
/// NE visits break the line and are never plotted as a zero-diameter result.
pub fn render_trajectory_svg(trajectory : @evidence.Trajectory) -> String {
render_trajectory_svg_in(trajectory, English)
}
///|
/// Localized presentation; input-derived text and machine codes are preserved.
pub fn render_trajectory_svg_in(
trajectory : @evidence.Trajectory,
language : ReportLanguage,
) -> String {
let mut baseline = 0
for target in trajectory.study.targets {
baseline += target.baseline_tenths_mm
}
let mut maximum = baseline
for a in trajectory.assessments {
if a.sum_tenths_mm is Some(sum) && sum > maximum {
maximum = sum
}
}
maximum = maximum * 5 / 4 + 1
let y = (value : Int) => 30 + (maximum - value) * 210 / maximum
let out = StringBuilder()
out.write_string(
tr(
language, "