Commit b9cb895e authored by Paul Asmuth's avatar Paul Asmuth
Browse files

add expr_to_stroke_style, expr_clonev, cleanups

parent d4fbeccc
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -129,6 +129,17 @@ ReturnCode expr_to_color_opt(
  return OK;
}

ReturnCode expr_to_stroke_style(
    const Expr* expr,
    StrokeStyle* style) {
  if (expr_is_value(expr, "none")) {
    style->line_width = from_unit(0);
    return OK;
  }

  return OK;
}

ReturnCode expr_to_copy(const Expr* e, ExprStorage* c) {
  *c = expr_clone(e);
  return OK;
+10 −5
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@
 */
#pragma once
#include "sexpr.h"
#include "graphics/brush.h"
#include "graphics/color.h"
#include "graphics/measure.h"

@@ -24,19 +25,19 @@ template <typename T>
using ExprConvTo = std::function<ReturnCode (const Expr*, T* to)>;

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

ReturnCode expr_to_strings(
    const Expr* prop,
    const Expr* expr,
    std::vector<std::string>* values);

ReturnCode expr_to_float64(
    const Expr* prop,
    const Expr* expr,
    double* value);

ReturnCode expr_to_float64_opt(
    const Expr* prop,
    const Expr* expr,
    std::optional<double>* value);

ReturnCode expr_to_measure(
@@ -52,13 +53,17 @@ ReturnCode expr_to_measures(
    std::vector<Measure>* measures);

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

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

ReturnCode expr_to_stroke_style(
    const Expr* expr,
    StrokeStyle* style);

ReturnCode expr_to_copy(
    const Expr* expr,
    ExprStorage* copy);
+10 −1
Original line number Diff line number Diff line
@@ -28,7 +28,7 @@ ReturnCode expr_walk_map(
    auto param = expr_get_value(expr);
    const auto& fn = fns.find(param);
    if (fn == fns.end()) {
      return errorf(ERROR, "invalid paramter: '{}'", param);
      return errorf(ERROR, "invalid parameter: '{}'", param);
    }

    if (expr = expr_next(expr); !expr) {
@@ -80,6 +80,15 @@ ReturnCode expr_rewritev(
  return OK;
}

std::vector<ExprStorage> expr_clonev(const std::vector<ExprStorage>& exprs) {
  std::vector<ExprStorage> out;
  for (const auto& e : exprs) {
    out.emplace_back(expr_clone(e.get()));
  }

  return out;
}

} // namespace fviz

+2 −0
Original line number Diff line number Diff line
@@ -41,6 +41,8 @@ ReturnCode expr_rewritev(
template <typename... T>
ExprStorage expr_build(T&&... items);

std::vector<ExprStorage> expr_clonev(const std::vector<ExprStorage>& exprs);

} // namespace fviz

#include "sexpr_util_impl.h"