Commit 2786a4c9 authored by Paul Asmuth's avatar Paul Asmuth
Browse files

configure_{color,measure} -> expr_to_{color,measure}

parent d5a64abb
Loading
Loading
Loading
Loading
+0 −60
Original line number Diff line number Diff line
@@ -38,31 +38,6 @@ using namespace std::placeholders;
namespace plotfx {

/*
ReturnCode configure_measure(
    const Expr* prop,
    Measure* value) {
  if (!plist::is_value(prop)) {
    return ReturnCode::errorf(
        "EARG",
        "incorrect number of arguments; expected: 1, got: $0",
        prop.size());
  }

  return parse_measure(prop, value);
}

ReturnCode configure_measure_opt(
    const Expr* prop,
    std::optional<Measure>* value) {
  Measure v;
  if (auto rc = configure_measure(prop, &v); !rc) {
    return rc;
  }

  *value = v;
  return OK;
}

ParserFn configure_multiprop(const std::vector<ParserFn>& parsers) {
  return [parsers] (const Expr* prop) -> ReturnCode {
    for (const auto& p : parsers) {
@@ -86,41 +61,6 @@ ParserFn configure_alt(const ParserDefinitions& parsers) {
  };
}

ReturnCode configure_color(
    const Expr* prop,
    Color* value) {
  if (!plist::is_value(prop)) {
    return ReturnCode::errorf(
        "EARG",
        "incorrect number of arguments; expected: 1, got: $0",
        prop.size());
  }

  if (StringUtil::beginsWith(prop, "#")) {
    if (value->parse(prop)) {
      return OK;
    }
  }

  return ReturnCode::error("EARG", "invalid color");
}

ParserFn configure_color_opt(std::optional<Color>* var) {
  return [=] (const Expr* prop) -> ReturnCode {
    Color c;
    if (auto rc = configure_color(prop, &c); !rc) {
      return rc;
    }

    *var = c;
    return OK;
  };
}

ParserFn configure_color_fn(Color* var) {
  return bind(&configure_color, _1, var);
}

ReturnCode configure_float(
    const Expr* prop,
    double* value) {
+57 −0
Original line number Diff line number Diff line
@@ -48,5 +48,62 @@ ReturnCode expr_to_string(
  return OK;
}

ReturnCode expr_to_measure(
    const Expr* expr,
    Measure* value) {
  if (!expr_is_value(expr)) {
    return ReturnCode::errorf(
        "EARG",
        "argument error; expected a value, got: $0",
        "..."); // FIXME
  }

  return parse_measure(expr_get_value(expr), value);
}

ReturnCode expr_to_measure_opt(
    const Expr* expr,
    std::optional<Measure>* value) {
  Measure v;
  if (auto rc = expr_to_measure(expr, &v); !rc) {
    return rc;
  }

  *value = v;
  return OK;
}

ReturnCode expr_to_color(
    const Expr* expr,
    Color* value) {
  if (!expr_is_value(expr)) {
    return ReturnCode::errorf(
        "EARG",
        "argument error; expected a value, got: $0",
        "..."); // FIXME
  }

  const auto expr_value = expr_get_value(expr);
  if (StringUtil::beginsWith(expr_value, "#")) {
    if (value->parse(expr_value)) {
      return OK;
    }
  }

  return ReturnCode::error("EARG", "invalid color");
}

ReturnCode expr_to_color_opt(
    const Expr* expr,
    std::optional<Color>* var) {
  Color c;
  if (auto rc = expr_to_color(expr, &c); !rc) {
    return rc;
  }

  *var = c;
  return OK;
}

} // namespace plotfx
+21 −1
Original line number Diff line number Diff line
@@ -28,13 +28,33 @@
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
#pragma once
#include <sexpr.h>
#include "sexpr.h"
#include "graphics/color.h"
#include "graphics/measure.h"

namespace plotfx {

using ExprConv = std::function<ReturnCode (const Expr*)>;

ReturnCode expr_to_string(
    const Expr* prop,
    std::string* value);

ReturnCode expr_to_measure(
    const Expr* expr,
    Measure* value);

ReturnCode expr_to_measure_opt(
    const Expr* expr,
    std::optional<Measure>* value);

ReturnCode expr_to_color(
    const Expr* prop,
    Color* value);

ReturnCode expr_to_color_opt(
    const Expr* expr,
    std::optional<Color>* var);

} // namespace plotfx