Commit 351ac846 authored by Paul Asmuth's avatar Paul Asmuth
Browse files

move the plotting functions into the tools/plotgen command

parent f3e8dbb9
Loading
Loading
Loading
Loading
+6 −30
Original line number Diff line number Diff line
@@ -13,42 +13,18 @@
 */
#pragma once
#include "command.h"
#include "plot/areas.h"
#include "plot/axis.h"
#include "plot/bars.h"
#include "plot/errorbars.h"
#include "plot/grid.h"
#include "plot/labels.h"
#include "plot/lines.h"
#include "plot/points.h"
#include "plot/polygons.h"
#include "plot/rectangles.h"
#include "plot/vectors.h"
#include "plot/plotgen.h"
#include "draw/rectangle.h"
#include "figure/legend.h"

namespace clip {

const CommandMap COMMANDS = {
  {"default", CommandFn(&context_set_default)},
  {"width", CommandFn(&context_configure)},
  {"height", CommandFn(&context_configure)},
  {"dpi", CommandFn(&context_configure)},
  {"layout/margins", CommandFn(&layout_add_margins)},
  {"draw/rectangle", CommandFn(&draw::rectangle)},
  {"plot/axes", CommandFn(&elements::plot::axis::axis_add_all)},
  {"plot/areas", CommandFn(&elements::plot::areas::areas_draw)},
  {"plot/axis", CommandFn(&elements::plot::axis::axis_draw)},
  {"plot/bars", CommandFn(&elements::plot::bars::bars_draw)},
  {"plot/errorbars", CommandFn(&elements::plot::errorbars::errorbars_draw)},
  {"plot/grid", CommandFn(&elements::plot::grid::draw_grid)},
  {"plot/labels", CommandFn(&elements::plot::labels::labels_draw)},
  {"plot/lines", CommandFn(&elements::plot::lines::draw_lines)},
  {"plot/points", CommandFn(&elements::plot::points::points_draw)},
  {"plot/polygons", CommandFn(&plot::polygons_draw)},
  {"plot/rectangles", CommandFn(&elements::plot::rectangles::rectangles_draw)},
  {"plot/vectors", CommandFn(&elements::plot::vectors::vectors_draw)},
  {"figure/legend", CommandFn(&elements::legend::legend_draw)},
  //{"width", CommandFn(&context_configure)},
  //{"height", CommandFn(&context_configure)},
  //{"dpi", CommandFn(&context_configure)},
  //{"draw/rectangle", CommandFn(&draw::rectangle)},
  {"tools/plotgen", CommandFn(&plotgen)},
};

} // namespace clip
+28 −44
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@
#include "plot/vectors.h"
#include "draw/rectangle.h"
#include "figure/legend.h"
#include "commands.h"

using namespace std::placeholders;

@@ -41,50 +42,33 @@ namespace clip {
ReturnCode eval(
    Context* ctx,
    const Expr* expr) {
  return expr_walk_tmap(expr, {
    {"width", bind(&measure_read, _1, &ctx->width)},
    {"height", bind(&measure_read, _1, &ctx->height)},
    {"dpi", bind(&expr_to_float64, _1, &ctx->dpi)},
    {"font", expr_call_string_fn(bind(&font_load_best, _1, &ctx->font))},
    {"font-size", bind(&measure_read, _1, &ctx->font_size)},
    {"background", bind(&context_set_background, ctx, _1)},
    {"limit-x", bind(&expr_to_float64_opt_pair, _1, &ctx->scale_x.min, &ctx->scale_x.max)},
    {"limit-x-min", bind(&expr_to_float64_opt, _1, &ctx->scale_x.min)},
    {"limit-x-max", bind(&expr_to_float64_opt, _1, &ctx->scale_x.max)},
    {"limit-y", bind(&expr_to_float64_opt_pair, _1, &ctx->scale_y.min, &ctx->scale_y.max)},
    {"limit-y-min", bind(&expr_to_float64_opt, _1, &ctx->scale_y.min)},
    {"limit-y-max", bind(&expr_to_float64_opt, _1, &ctx->scale_y.max)},
    {"scale-x", bind(&scale_configure_kind, _1, &ctx->scale_x)},
    {"scale-y", bind(&scale_configure_kind, _1, &ctx->scale_y)},
    {"scale-x-padding", bind(&expr_to_float64, _1, &ctx->scale_x.padding)},
    {"scale-y-padding", bind(&expr_to_float64, _1, &ctx->scale_y.padding)},
    {
      "margin",
      expr_calln_fn({
        bind(&measure_read, _1, &ctx->margins[0]),
        bind(&measure_read, _1, &ctx->margins[1]),
        bind(&measure_read, _1, &ctx->margins[2]),
        bind(&measure_read, _1, &ctx->margins[3]),
      })
    },
    {"margin-top", bind(&measure_read, _1, &ctx->margins[0])},
    {"margin-right", bind(&measure_read, _1, &ctx->margins[1])},
    {"margin-bottom", bind(&measure_read, _1, &ctx->margins[2])},
    {"margin-left", bind(&measure_read, _1, &ctx->margins[3])},
    {"axes", bind(&elements::plot::axis::axis_add_all, ctx, _1)},
    {"areas", bind(&elements::plot::areas::areas_draw, ctx, _1)},
    {"axis", bind(&elements::plot::axis::axis_draw, ctx, _1)},
    {"bars", bind(&elements::plot::bars::bars_draw, ctx, _1)},
    {"errorbars", bind(&elements::plot::errorbars::errorbars_draw, ctx, _1)},
    {"grid", bind(&elements::plot::grid::draw_grid, ctx, _1)},
    {"labels", bind(&elements::plot::labels::labels_draw, ctx, _1)},
    {"lines", bind(&elements::plot::lines::draw_lines, ctx, _1)},
    {"points", bind(&elements::plot::points::points_draw, ctx, _1)},
    {"polygons", bind(&plot::polygons_draw, ctx, _1)},
    {"rectangles", bind(&elements::plot::rectangles::rectangles_draw, ctx, _1)},
    {"vectors", bind(&elements::plot::vectors::vectors_draw, ctx, _1)},
    {"legend", bind(&elements::legend::legend_draw, ctx, _1)},
  });
  // execute commands
  for (; expr; expr = expr_next(expr)) {
    if (!expr || !expr_is_list(expr)) {
      return error(ERROR, "expected a command list");
    }

    auto args = expr_get_list(expr);
    if (!args || !expr_is_value(args)) {
      return error(ERROR, "expected a command name");
    }

    auto arg0 = expr_get_value(args);
    args = expr_next(args);

    const Command* cmd;
    if (auto cmd_iter = COMMANDS.find(arg0); cmd_iter != COMMANDS.end()) {
      cmd = &cmd_iter->second;
    } else {
      return {ERROR, fmt::format("Invalid command '{}'", arg0)};
    }

    if (auto rc = cmd->fn(ctx, args); !rc) {
      return rc;
    }
  }

  return OK;
}

ReturnCode eval(
+1 −1
Original line number Diff line number Diff line
@@ -275,7 +275,7 @@ ReturnCode areas_draw(
  std::vector<std::string> data_xoffset;
  std::vector<std::string> data_yoffset;

  auto config_rc = expr_walk_map(expr, {
  auto config_rc = expr_walk_map_wrapped(expr, {
    {"data-x", bind(&data_load, _1, &c->x)},
    {"data-y", bind(&data_load, _1, &c->y)},
    {"data-x-high", bind(&data_load, _1, &c->x)},
+2 −2
Original line number Diff line number Diff line
@@ -637,7 +637,7 @@ ReturnCode axis_draw(Context* ctx, const Expr* expr) {
  config->border_style.color = ctx->foreground_color;

  {
    auto rc = expr_walk_map(expr, {
    auto rc = expr_walk_map_wrapped(expr, {
      {
        "align",
        expr_to_enum_fn<AxisAlign>(&config->align, {
@@ -882,7 +882,7 @@ ReturnCode axis_add_all(Context* ctx, const Expr* expr) {
  axes[3].border_style.line_width = from_pt(1);
  axes[3].border_style.color = ctx->foreground_color;

  auto config_rc = expr_walk_map(expr, {
  auto config_rc = expr_walk_map_wrapped(expr, {
    {"position", bind(&axis_configure_position, _1, &axes)},

    /* scale options */
+1 −1
Original line number Diff line number Diff line
@@ -319,7 +319,7 @@ ReturnCode bars_draw(
  std::vector<std::string> data_xoffset;
  std::vector<std::string> data_yoffset;

  auto config_rc = expr_walk_map(expr, {
  auto config_rc = expr_walk_map_wrapped(expr, {
    {"data-x", bind(&data_load_strings, _1, &data_x)},
    {"data-y", bind(&data_load_strings, _1, &data_y)},
    {"data-x-high", bind(&data_load_strings, _1, &data_x)},
Loading