Commit 0a7d4d71 authored by Paul Asmuth's avatar Paul Asmuth
Browse files

graphics: add parse_measure

parent 64b79917
Loading
Loading
Loading
Loading
+13 −1
Original line number Diff line number Diff line
@@ -35,7 +35,6 @@ namespace plotfx {
ReturnCode parseDataSeries(
    const plist::Property& prop,
    std::vector<double>* data) {
  std::cerr << "configure series data " << prop.size() << " \n";
  for (const auto& v : prop.values) {
    double value;
    try {
@@ -50,5 +49,18 @@ ReturnCode parseDataSeries(
  return OK;
}

ReturnCode parseMeasureProp(
    const plist::Property& prop,
    Measure* value) {
  if (prop.size() != 1) {
    return ReturnCode::errorf(
        "EARG",
        "incorrect number of arguments; expected: 1, got: $0",
        prop.size());
  }

  return parse_measure(prop[0], value);
}

} // namespace plotfx
+5 −0
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@
#pragma once
#include <unordered_map>
#include <plist/plist.h>
#include <graphics/measure.h>
#include "utils/return_code.h"

namespace plotfx {
@@ -80,5 +81,9 @@ ReturnCode parseDataSeries(
    const plist::Property& prop,
    std::vector<double>* data);

ReturnCode parseMeasureProp(
    const plist::Property& prop,
    Measure* value);

} // namespace plotfx
+29 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
#include "measure.h"
#include <iostream>

namespace plotfx {

@@ -78,5 +79,33 @@ Measure to_px(const MeasureTable& t, const Measure& v) {
  return Measure{.unit = Unit::PX, .value = v_px};
}

ReturnCode parse_measure(const std::string& s, Measure* measure) {
  double value;
  size_t unit_pos;
  try {
    value = std::stod(s, &unit_pos);
  } catch (... ) {
    return ERROR_INVALID_ARGUMENT;
  }

  auto unit = s.substr(unit_pos);
  if (unit == "px") {
    *measure = from_px(value);
    return OK;
  }

  if (unit == "pt") {
    *measure = from_pt(value);
    return OK;
  }

  if (unit == "rem") {
    *measure = from_rem(value);
    return OK;
  }

  return ERROR_INVALID_ARGUMENT;
}

} // namespace plotfx
+3 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@
#include <stdlib.h>
#include <vector>
#include <string>
#include <utils/return_code.h>

namespace plotfx {

@@ -58,5 +59,7 @@ Measure from_rem(double v);

Measure to_px(const MeasureTable& t, const Measure& v);

ReturnCode parse_measure(const std::string& s, Measure* value);

} // namespace plotfx