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

replace the element tree with a simple 'flat' command structure

parent c6f05d8f
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -79,6 +79,18 @@ message(STATUS "Config Options: text_enable_bidi=${FVIZ_TEXT_ENABLE_BIDI}")
# -----------------------------------------------------------------------------
file(GLOB source_files "src/*.cc" "src/**/*.cc" "src/elements/**/*.cc" )
list(REMOVE_ITEM source_files "${CMAKE_SOURCE_DIR}/src/cli.cc")
list(REMOVE_ITEM source_files "${CMAKE_SOURCE_DIR}/src/plot/bars.cc")
list(REMOVE_ITEM source_files "${CMAKE_SOURCE_DIR}/src/plot/rectangles.cc")
list(REMOVE_ITEM source_files "${CMAKE_SOURCE_DIR}/src/plot/points.cc")
list(REMOVE_ITEM source_files "${CMAKE_SOURCE_DIR}/src/plot/areas.cc")
list(REMOVE_ITEM source_files "${CMAKE_SOURCE_DIR}/src/plot/labels.cc")
list(REMOVE_ITEM source_files "${CMAKE_SOURCE_DIR}/src/plot/errorbars.cc")
list(REMOVE_ITEM source_files "${CMAKE_SOURCE_DIR}/src/plot/vectors.cc")
list(REMOVE_ITEM source_files "${CMAKE_SOURCE_DIR}/src/legend/item.cc")
list(REMOVE_ITEM source_files "${CMAKE_SOURCE_DIR}/src/environment.cc")
list(REMOVE_ITEM source_files "${CMAKE_SOURCE_DIR}/src/layout/box.cc")
list(REMOVE_ITEM source_files "${CMAKE_SOURCE_DIR}/src/plot.cc")
list(REMOVE_ITEM source_files "${CMAKE_SOURCE_DIR}/src/arrows.cc")
add_library(clip OBJECT ${source_files})
set_property(TARGET clip PROPERTY POSITION_INDEPENDENT_CODE 1)
set(FVIZ_LIB_LDFLAGS ${CAIRO_LIBRARIES} ${FREETYPE_LIBRARIES} ${HARFBUZZ_LIBRARIES} ${HARFBUZZ_ICU_LIBRARIES} ${PNG_LIBRARIES} ${FONTCONFIG_LIBRARIES} ${FRIBIDI_LIBRARIES} ${fmt_LIBRARY})
+5 −4
Original line number Diff line number Diff line
@@ -46,10 +46,11 @@ void clip_set_error(clip_t* ctx, const ReturnCode& err) {
}

int clip_eval(clip_t* ctx, const char* expr) {
  Environment env;
  auto rc = clip::eval(env, expr, ctx->format, &ctx->buffer);
  clip_set_error(ctx, rc);
  return rc;
  //Context ctx;
  //auto rc = clip::eval(ctx, expr);
  //clip_set_error(ctx, rc);
  //return rc;
  return OK;
}

void clip_get_result(clip_t* ctx, const void** data, size_t* data_len) {
+31 −8
Original line number Diff line number Diff line
@@ -18,10 +18,11 @@
#include <string>

#include "config.h"
#include "context.h"
#include "utils/flagparser.h"
#include "return_code.h"
#include "utils/stringutil.h"
#include "environment.h"
#include "graphics/export_svg.h"
#include "eval.h"
#include "fileutil.h"

@@ -153,6 +154,17 @@ int main(int argc, const char** argv) {
    return EXIT_FAILURE;
  }

  /* set up the context */
  Context ctx;
  ctx.font_defaults = flag_font_defaults;
  ctx.font_load = flag_font_load;
  ctx.layout_stack.push_back(Rectangle(0, 0, ctx.width, ctx.height));

  if (auto rc = context_setup_defaults(&ctx); !rc) {
    error_print(rc, std::cerr);
    return EXIT_FAILURE;
  }

  /* read the input file */
  std::string input;
  if (flag_stdin) {
@@ -168,18 +180,29 @@ int main(int argc, const char** argv) {
    }
  }

  /* run clip */
  Environment env;
  env.font_defaults = flag_font_defaults;
  env.font_load = flag_font_load;

  std::string output_buffer;
  if (auto rc = clip::eval(env, input, output_format, &output_buffer); !rc) {
  /* evaluate the input commands */
  if (auto rc = clip::eval(&ctx, input); !rc) {
    error_print(rc, std::cerr);
    return EXIT_FAILURE;
  }

  /* write the output file */
  std::string output_buffer;
  ReturnCode export_rc;
  switch (output_format) {
    case OutputFormat::SVG:
      export_rc = export_svg(&ctx, &output_buffer);
      break;
    //case OutputFormat::PNG:
    //  export_rc = page_export_png(page, drawlist, output_buffer);
    //  break;
  }

  if (!export_rc) {
    error_print(export_rc, std::cerr);
    return EXIT_FAILURE;
  }

  if (flag_stdout) {
    std::cout << output_buffer;
  } else {
+19 −18
Original line number Diff line number Diff line
@@ -11,6 +11,7 @@
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
#include "context.h"
#include "data.h"
#include "color_reader.h"
#include "sexpr_util.h"
@@ -20,7 +21,7 @@ using namespace std::placeholders;
namespace clip {

ReturnCode color_read(
    const Environment& env,
    const Context* ctx,
    const Expr* expr,
    Color* color) {
  if (expr_is_value(expr)) {
@@ -35,9 +36,9 @@ ReturnCode color_read(

    // color palette index
    if (StringUtil::isDigitString(value)) {
      if (!env.color_palette.empty()) {
        *color = env.color_palette[
            (std::stol(value) - 1) % env.color_palette.size()];
      if (!ctx->color_palette.empty()) {
        *color = ctx->color_palette[
            (std::stol(value) - 1) % ctx->color_palette.size()];
      }

      return OK;
@@ -87,7 +88,7 @@ ReturnCode color_read(
}

ReturnCode color_read_string(
    const Environment& env,
    const Context* ctx,
    const std::string& value,
    Color* color) {

@@ -100,8 +101,8 @@ ReturnCode color_read_string(

  // color palette index
  if (StringUtil::isDigitString(value)) {
    if (!env.color_palette.empty()) {
      *color = env.color_palette[std::stoul(value) % env.color_palette.size()];
    if (!ctx->color_palette.empty()) {
      *color = ctx->color_palette[std::stoul(value) % ctx->color_palette.size()];
    }

    return OK;
@@ -114,11 +115,11 @@ ReturnCode color_read_string(
}

ReturnCode color_read_opt(
    const Environment& env,
    const Context* ctx,
    const Expr* expr,
    std::optional<Color>* color) {
  Color c;
  if (auto rc = color_read(env, expr, &c); !rc) {
  if (auto rc = color_read(ctx, expr, &c); !rc) {
    return rc;
  }

@@ -127,7 +128,7 @@ ReturnCode color_read_opt(
}

ReturnCode color_map_read_gradient(
    const Environment& env,
    const Context* ctx,
    const Expr* expr,
    ColorMap* color_map) {
  std::vector<std::pair<double, Color>> gradient;
@@ -154,7 +155,7 @@ ReturnCode color_map_read_gradient(
    }

    Color color;
    if (auto rc = color_read(env, args[1], &color); !rc) {
    if (auto rc = color_read(ctx, args[1], &color); !rc) {
      return rc;
    }

@@ -166,7 +167,7 @@ ReturnCode color_map_read_gradient(
}

ReturnCode color_map_read_steps(
    const Environment& env,
    const Context* ctx,
    const Expr* expr,
    ColorMap* color_map) {
  std::vector<std::pair<double, Color>> steps;
@@ -193,7 +194,7 @@ ReturnCode color_map_read_steps(
    }

    Color color;
    if (auto rc = color_read(env, args[1], &color); !rc) {
    if (auto rc = color_read(ctx, args[1], &color); !rc) {
      return rc;
    }

@@ -205,7 +206,7 @@ ReturnCode color_map_read_steps(
}

ReturnCode color_map_read(
    const Environment& env,
    const Context* ctx,
    const Expr* expr,
    ColorMap* color_map) {
  if (!expr || !expr_is_list(expr)) {
@@ -218,11 +219,11 @@ ReturnCode color_map_read(
  expr = expr_get_list(expr);

  if (expr_is_value(expr, "gradient")) {
    return color_map_read_gradient(env, expr_next(expr), color_map);
    return color_map_read_gradient(ctx, expr_next(expr), color_map);
  }

  if (expr_is_value(expr, "steps")) {
    return color_map_read_steps(env, expr_next(expr), color_map);
    return color_map_read_steps(ctx, expr_next(expr), color_map);
  }

  return errorf(
@@ -234,7 +235,7 @@ ReturnCode color_map_read(
}

ReturnCode color_palette_read(
    const Environment& env,
    const Context* ctx,
    const Expr* expr,
    ColorPalette* color_palette) {
  color_palette->clear();
@@ -246,7 +247,7 @@ ReturnCode color_palette_read(
  if (expr_is_list(expr)) {
    Color c;
    for (auto arg = expr_get_list(expr); arg; arg = expr_next(arg)) {
      if (auto rc = color_read(env, arg, &c); !rc) {
      if (auto rc = color_read(ctx, arg, &c); !rc) {
        return rc;
      }

+5 −5
Original line number Diff line number Diff line
@@ -21,27 +21,27 @@
namespace clip {

ReturnCode color_read(
    const Environment& env,
    const Context* ctx,
    const Expr* expr,
    Color* color);

ReturnCode color_read_string(
    const Environment& env,
    const Context* ctx,
    const std::string& value,
    Color* color);

ReturnCode color_read_opt(
    const Environment& env,
    const Context* ctx,
    const Expr* expr,
    std::optional<Color>* color);

ReturnCode color_map_read(
    const Environment& env,
    const Context* ctx,
    const Expr* expr,
    ColorMap* color_map);

ReturnCode color_palette_read(
    const Environment& env,
    const Context* ctx,
    const Expr* expr,
    ColorPalette* color_palette);

Loading