in src/graphics/PlotUtil.cpp [213:243]
Ptr<Figure> extrapolate(const Ptr<Action>& firstAction, const Ptr<Action>& secondAction) {
auto kind = firstAction->getKind();
if (state == State::AXIS_LINES && kind != ActionKind::LINE && kind != ActionKind::TEXT) {
flushAndSwitchTo(State::INITIAL);
}
if (state == State::AXIS_TEXT && kind != ActionKind::TEXT) {
flushAndSwitchTo(State::INITIAL);
}
switch (kind) {
case ActionKind::CIRCLE:
return extrapolate<CircleAction>(firstAction, secondAction);
case ActionKind::LINE:
return extrapolate<LineAction>(firstAction, secondAction);
case ActionKind::NEW_PAGE:
return extrapolate<NewPageAction>(firstAction, secondAction);
case ActionKind::PATH:
return extrapolate<PathAction>(firstAction, secondAction);
case ActionKind::POLYGON:
return extrapolate<PolygonAction>(firstAction, secondAction);
case ActionKind::POLYLINE:
return extrapolate<PolylineAction>(firstAction, secondAction);
case ActionKind::RASTER:
return extrapolate<RasterAction>(firstAction, secondAction);
case ActionKind::RECTANGLE:
return extrapolate<RectangleAction>(firstAction, secondAction);
case ActionKind::TEXT:
return extrapolate<TextAction>(firstAction, secondAction);
default:
throw ParsingError(PlotError::UNSUPPORTED_ACTION);
}
}