Commit 5dc738f9 authored by Paul Asmuth's avatar Paul Asmuth
Browse files

update format_configure

parent c5ba705b
Loading
Loading
Loading
Loading
+39 −43
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@
 */
#include "format.h"
#include "data.h"
#include "sexpr_util.h"
#include "utils/UnixTime.h"

#include <sstream>
@@ -28,17 +29,18 @@ Formatter format_decimal_scientific(size_t precision) {
  };
}

/*
ReturnCode confgure_format_decimal_scientific(
    const plist::Property& prop,
ReturnCode format_configure_decimal_scientific(
    const Expr* expr,
    Formatter* formatter) {
  auto args = expr_collect(expr);

  uint32_t precision = 1;
  switch (prop.size()) {
  switch (args.size()) {
    case 0:
      break;
    case 1:
      try {
        precision = std::stod(prop[0]);
        precision = std::stod(expr_get_value(args[0]));
        break;
      } catch (... ) {
        return ERROR;
@@ -50,7 +52,6 @@ ReturnCode confgure_format_decimal_scientific(
  *formatter = format_decimal_scientific(precision);
  return OK;
}
*/

Formatter format_decimal_fixed(size_t precision) {
  return [precision] (const std::string& v) -> std::string {
@@ -60,21 +61,18 @@ Formatter format_decimal_fixed(size_t precision) {
  };
}

/*
ReturnCode confgure_format_decimal_fixed(
    const plist::Property& prop,
ReturnCode format_configure_decimal_fixed(
    const Expr* expr,
    Formatter* formatter) {
  if (!plist::is_enum(prop, "fixed")) {
    return ERROR;
  }
  auto args = expr_collect(expr);

  uint32_t precision = 1;
  switch (prop.size()) {
  switch (args.size()) {
    case 0:
      break;
    case 1:
      try {
        precision = std::stod(prop[0]);
        precision = std::stod(expr_get_value(args[0]));
        break;
      } catch (... ) {
        return ERROR;
@@ -86,7 +84,6 @@ ReturnCode confgure_format_decimal_fixed(
  *formatter = format_decimal_fixed(precision);
  return OK;
}
*/

Formatter format_datetime(const std::string& fmt) {
  return [fmt] (const std::string& v) -> std::string {
@@ -95,20 +92,17 @@ Formatter format_datetime(const std::string& fmt) {
  };
}

/*
ReturnCode confgure_format_datetime(
    const plist::Property& prop,
ReturnCode format_configure_datetime(
    const Expr* expr,
    Formatter* formatter) {
  if (!plist::is_enum(prop, "datetime")) {
    return ERROR;
  }
  auto args = expr_collect(expr);

  std::string fmtspec = "%Y-%m-%d %H:%M:%S"; // FIXME improved auto format
  switch (prop.size()) {
  switch (args.size()) {
    case 0:
      break;
    case 1:
      fmtspec = prop[0];
      fmtspec = expr_get_value(args[0]);
      break;
    default:
      return ERROR;
@@ -117,7 +111,6 @@ ReturnCode confgure_format_datetime(
  *formatter = format_datetime(fmtspec);
  return OK;
}
*/

Formatter format_string() {
  return [] (const std::string& v) -> std::string {
@@ -125,35 +118,39 @@ Formatter format_string() {
  };
}

/*
ReturnCode confgure_format_string(
    const plist::Property& prop,
ReturnCode format_configure_string(
    const Expr* expr,
    Formatter* formatter) {
  *formatter = format_string();
  return OK;
}

ReturnCode confgure_format(
    const plist::Property& prop,
ReturnCode format_configure(
    const Expr* expr,
    Formatter* formatter) {
  if (plist::is_value(prop, "fixed") ||
      plist::is_enum(prop, "fixed")) {
    return confgure_format_decimal_fixed(prop, formatter);
  if (!expr || !expr_is_list(expr)) {
    return errorf(
        ERROR,
        "invalid argument; expected a list but got: {}",
        "..."); // FIXME
  }

  if (plist::is_value(prop, "scientific") ||
      plist::is_enum(prop, "scientific")) {
    return confgure_format_decimal_scientific(prop, formatter);
  expr = expr_get_list(expr);

  if (expr_is_value(expr, "fixed")) {
    return format_configure_decimal_fixed(expr_next(expr), formatter);
  }

  if (plist::is_value(prop, "datetime") ||
      plist::is_enum(prop, "datetime")) {
    return confgure_format_datetime(prop, formatter);
  if (expr_is_value(expr, "scientific")) {
    return format_configure_decimal_scientific(expr_next(expr), formatter);
  }

  if (plist::is_value(prop, "string") ||
      plist::is_enum(prop, "string")) {
    return confgure_format_string(prop, formatter);
  if (expr_is_value(expr, "datetime")) {
    return format_configure_datetime(expr_next(expr), formatter);
  }

  if (expr_is_value(expr, "string")) {
    return format_configure_string(expr_next(expr), formatter);
  }

  return errorf(
@@ -163,9 +160,8 @@ ReturnCode confgure_format(
      "  - scientific\n",
      "  - datetime\n",
      "  - string\n",
      prop.value);
      expr_inspect(expr));
}
*/

} // namespace fviz
+1 −1
Original line number Diff line number Diff line
@@ -26,7 +26,7 @@ Formatter format_decimal_scientific(size_t precision);
Formatter format_datetime(const std::string& fmt);
Formatter format_string();

ReturnCode confgure_format(
ReturnCode format_configure(
    const Expr* expr,
    Formatter* formatter);

+1 −0
Original line number Diff line number Diff line
@@ -523,6 +523,7 @@ ReturnCode build(const Environment& env, const Expr* expr, ElementRef* elem) {
  {
    auto rc = expr_walk_map(expr_next(expr), {
      {"ticks", bind(&scale_configure_layout, _1, &config->scale_layout)},
      {"format", bind(&format_configure, _1, &config->label_formatter)},
      {"range", bind(&expr_to_float64_opt_pair, _1, &config->scale.min, &config->scale.max)},
      {"range-min", bind(&expr_to_float64_opt, _1, &config->scale.min)},
      {"range-max", bind(&expr_to_float64_opt, _1, &config->scale.max)},
+2 −0
Original line number Diff line number Diff line
@@ -87,6 +87,8 @@ ReturnCode build(
        bind(&expr_rewritev, _1, "ticks-y", &grid_extra_opts),
      })
    },
    {"axis-x-format", bind(&expr_rewritev, _1, "format", &axis_x_opts)},
    {"axis-y-format", bind(&expr_rewritev, _1, "format", &axis_y_opts)},
    {"color", bind(&expr_rewritev, _1, "color", &line_opts)},
    {"colors", bind(&expr_rewritev, _1, "colors", &line_opts)},
    {"stroke", bind(&expr_rewritev, _1, "stroke", &line_opts)},
+3 −0
Original line number Diff line number Diff line
(chart/linechart
    data-x (csv "tests/testdata/measurement.csv" time)
    data-y (csv "tests/testdata/measurement.csv" value1)
    axes (bottom left)
    axis-y-format (scientific)
    axis-x-format (datetime "%H:%M:%S")
    grid (color #fff)
    background #eee
    border none)
Loading