Commit 4c6d8a54 authored by Paul Asmuth's avatar Paul Asmuth
Browse files

remove the obsolete Document and DataContext structs

parent bc5f1b52
Loading
Loading
Loading
Loading
+55 −3
Original line number Diff line number Diff line
@@ -30,16 +30,68 @@
#include "environment.h"
#include "common/format.h"
#include "common/scale.h"

#include <functional>
#include "config_helpers.h"
#include "graphics/font_lookup.h"

using namespace std::placeholders;

namespace plotfx {

Environment::Environment() :
    screen_width(Unit::UNIT, 1200),
    screen_height(Unit::UNIT, 480),
    dpi(96),
    scale_layout_x(bind(&scale_layout_subdivide, _1, _2, 8)),
    scale_layout_y(bind(&scale_layout_subdivide, _1, _2, 8)) {}
    scale_layout_y(bind(&scale_layout_subdivide, _1, _2, 8)),
    background_color(Color::fromRGB(1,1,1)),
    text_color(Color::fromRGB(.2,.2,.2)),
    border_color(Color::fromRGB(.66,.66,.66)),
    font_size(from_pt(11, dpi)) {}

ReturnCode environment_setup_defaults(Environment* env) {
  if (!font_load(DefaultFont::HELVETICA_REGULAR, &env->font)) {
    return ReturnCode::error(
        "EARG",
        "unable to find default sans-sans font (Helvetica/Arial)");
  }

  return OK;
}

ReturnCode environment_configure(
    const plist::PropertyList& plist,
    Environment* env) {
  if (auto rc = environment_setup_defaults(env); !rc.isSuccess()) {
    return rc;
  }

  static const ParserDefinitions pdefs = {
    {"width", bind(&configure_measure, _1, &env->screen_width)},
    {"height", bind(&configure_measure, _1, &env->screen_height)},
    {"background-color", bind(&configure_color, _1, &env->background_color)},
    {
      "foreground-color",
      configure_multiprop({
          bind(&configure_color, _1, &env->text_color),
          bind(&configure_color, _1, &env->border_color),
      })
    },
    {"text-color", bind(&configure_color, _1, &env->text_color)},
    {"border-color", bind(&configure_color, _1, &env->border_color)},
    {"scale-x", bind(&domain_configure, _1, &env->scale_x)},
    {"scale-x-min", bind(&configure_float_opt, _1, &env->scale_x.min)},
    {"scale-x-max", bind(&configure_float_opt, _1, &env->scale_x.max)},
    {"scale-x-padding", bind(&configure_float, _1, &env->scale_x.padding)},
    {"scale-x-layout", bind(&configure_scale_layout, _1, &env->scale_layout_x)},
    {"scale-y", bind(&domain_configure, _1, &env->scale_y)},
    {"scale-y-min", bind(&configure_float_opt, _1, &env->scale_y.min)},
    {"scale-y-max", bind(&configure_float_opt, _1, &env->scale_y.max)},
    {"scale-y-padding", bind(&configure_float, _1, &env->scale_y.padding)},
    {"scale-y-layout", bind(&configure_scale_layout, _1, &env->scale_layout_y)},
  };

  return parseAll(plist, pdefs);
}

} // namespace plotfx

+7 −0
Original line number Diff line number Diff line
@@ -36,12 +36,15 @@
#include "graphics/color.h"
#include "graphics/text.h"
#include "common/scale.h"
#include "plist/plist.h"

namespace plotfx {
class Layer;

struct Environment {
  Environment();
  Measure screen_width;
  Measure screen_height;
  double dpi;
  FontInfo font;
  Measure font_size;
@@ -55,6 +58,10 @@ struct Environment {
  ScaleLayoutFn scale_layout_y;
};

ReturnCode environment_configure(
    const plist::PropertyList& plist,
    Environment* env);

} // namespace plotfx

+0 −121
Original line number Diff line number Diff line
@@ -256,68 +256,6 @@ ReturnCode load_csv(
  return OK;
}

ReturnCode parse_datasource_csv(
    const plist::Property& prop ,
    DataContext* ctx) {
  if (!plist::is_enum(prop, "csv")) {
    return ERROR;
  }

  if (prop.size() < 1) {
    return ERROR; // FIXME
  }

  std::string csv_path;
  bool csv_headers = true;
  for (size_t i = 0; i < prop.size(); ++i) {
    if (i == 0) {
      csv_path = prop[i].value;
      continue;
    }

    if (prop[i].value == "noheaders") {
      csv_headers = false;
      continue;
    }
  }

  return load_csv(csv_path, csv_headers, &ctx->by_name);
}

ReturnCode configure_datasource_prop(
    const plist::Property& prop,
    DataContext* data) {
  if (plist::is_enum(prop, "csv")) {
    return parse_datasource_csv(prop, data);
  }

  return ERROR;
}

ReturnCode configure_datasource(
    const plist::PropertyList& plist,
    DataContext* data) {
  static const ParserDefinitions pdefs = {
    {"data", bind(&configure_datasource_prop, _1, data)},
  };

  return parseAll(plist, pdefs);
}

ParserFn configure_key(std::string* key) {
  return [key] (const plist::Property& prop) -> ReturnCode {
    if (plist::is_value(prop) && prop.value.size() > 0 && prop.value[0] == '$') {
      *key = prop.value.substr(1);
      return OK;
    } else {
      return ReturnCode::errorf(
          "EARG",
          "invalid value '$0'; keys must start with a dollar sign ($)",
          prop.value);
    }
  };
}

ReturnCode parse_data_series_csv(
    const plist::Property& prop,
    SeriesRef* data_ref) {
@@ -358,65 +296,6 @@ ReturnCode parse_data_series_csv(
  }
}

ReturnCode parse_data_series_inline(
    const plist::Property& prop,
    SeriesRef* data_ref) {
  if (!plist::is_enum(prop, "inline")) {
    return ERROR;
  }

  auto data = std::make_shared<Series>();
  for (const auto& value : *prop.next) {
    data->emplace_back(value);
  }

  *data_ref = data;
  return OK;
}

ReturnCode parse_data_series_var(
    const plist::Property& prop,
    const DataContext& ctx,
    SeriesRef* data) {
  if (!plist::is_value_literal(prop)) {
    return ERROR;
  }

  const auto& var_name = prop.value;
  auto var_data = find_maybe(ctx.by_name, var_name);
  if (!var_data) {
    return ReturnCode::errorf("EARG", "variable not found: '$0'", var_name);
  }

  *data = var_data;
  return OK;
}

ReturnCode configure_series(
    const plist::Property& prop,
    const DataContext& ctx,
    SeriesRef* data) {
  if (plist::is_enum(prop, "csv")) {
    return parse_data_series_csv(prop, data);
  }

  if (plist::is_enum(prop, "inline")) {
    return parse_data_series_inline(prop, data);
  }

  if (plist::is_value_literal(prop)) {
    return parse_data_series_var(prop, ctx, data);
  }

  return ERROR;
}

ParserFn configure_series_fn(
    const DataContext& ctx,
    SeriesRef* series) {
  return bind(&configure_series, _1, ctx, series);
}

ReturnCode configure_strings(
    const plist::Property& prop,
    std::vector<std::string>* data) {
+1 −19
Original line number Diff line number Diff line
@@ -76,8 +76,6 @@ ParserFn configure_multiprop(const std::vector<ParserFn>& parsers);
ParserFn configure_alt(
    const ParserDefinitions& parsers);

ParserFn configure_key(std::string* key);

ReturnCode configure_measure(
    const plist::Property& prop,
    Measure* value);
@@ -111,23 +109,6 @@ ReturnCode configure_float_opt(
    const plist::Property& prop,
    std::optional<double>* value);

ReturnCode configure_datasource_prop(
    const plist::Property& prop,
    DataContext* data);

ReturnCode configure_datasource(
    const plist::PropertyList& plist,
    DataContext* data);

ReturnCode configure_series(
    const plist::Property& prop,
    const DataContext& ctx,
    SeriesRef* data);

ParserFn configure_series_fn(
    const DataContext& ctx,
    SeriesRef* data);

ReturnCode configure_strings(
    const plist::Property& prop,
    std::vector<std::string>* data);
@@ -136,6 +117,7 @@ ReturnCode configure_measures(
    const plist::Property& prop,
    std::vector<Measure>* measures);


} // namespace plotfx

#include "config_helpers_impl.h"
+0 −5
Original line number Diff line number Diff line
@@ -39,11 +39,6 @@ using Series = std::vector<Value>;
using SeriesRef = std::shared_ptr<const Series>;
using SeriesMap = std::unordered_map<std::string, SeriesRef>;

struct DataContext {
  SeriesMap by_name;
  SeriesMap defaults;
};

struct DataGroup {
  Value key;
  std::vector<size_t> index;
Loading