From: Martin Mares Date: Tue, 3 Apr 2018 21:31:30 +0000 (+0200) Subject: Implemented add-blank X-Git-Tag: v0.1~24 X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=07b416d9b0ee90d676616fd1e680fe96113fb085;p=paperjam.git Implemented add-blank --- diff --git a/TODO b/TODO index 289e387..a155a81 100644 --- a/TODO +++ b/TODO @@ -52,8 +52,10 @@ duplex modulo half -# Add an empty page after the current one -add-blank +| # Add an empty page after the current one +| add-blank +| n= +| paper... # Set either: # - paper size + margins diff --git a/cmds.cc b/cmds.cc index 6acb19c..65a9c41 100644 --- a/cmds.cc +++ b/cmds.cc @@ -372,7 +372,7 @@ public: { pipe = c->pipe; } - vector process(vector &pages); + vector process(vector &pages) override; }; static int validate_page_index(vector &pages, int idx) @@ -414,7 +414,7 @@ public: { pipe = c->pipe; } - vector process(vector &pages); + vector process(vector &pages) override; }; static pipeline_branch *find_branch(pipeline *pipe, vector &pages, int idx) @@ -467,7 +467,7 @@ public: die("Modulo must have n > 0"); pipe = c->pipe; } - vector process(vector &pages); + vector process(vector &pages) override; }; vector modulo_cmd::process(vector &pages) @@ -520,12 +520,12 @@ static const arg_def modulo_args[] = { { NULL, 0 } }; -/*** draw_bbox ***/ +/*** draw-bbox ***/ class draw_bbox_cmd : public cmd_exec { public: draw_bbox_cmd(cmd *c UNUSED) { } - vector process(vector &pages); + vector process(vector &pages) override; }; class draw_bbox_page : public page { @@ -559,7 +559,7 @@ vector draw_bbox_cmd::process(vector &pages) class merge_cmd : public cmd_exec { public: merge_cmd(cmd *c UNUSED) { } - vector process(vector &pages); + vector process(vector &pages) override; }; class merge_page : public page { @@ -751,6 +751,44 @@ static const arg_def margins_args[] = { { NULL, 0 } }; +/*** add-blank ***/ + +class add_blank_cmd : public cmd_exec { + int n; + paper_spec paper; +public: + add_blank_cmd(cmd *c) : paper(c, true) + { + n = c->arg("n")->as_int(1); + } + vector process(vector &pages) override; +}; + +vector add_blank_cmd::process(vector &pages) +{ + vector out; + + for (auto p: pages) + { + out.push_back(p); + for (int i=0; iwidth, h = p->height; + out.push_back(new empty_page(w, h)); + } + } + + return out; +} + +static const arg_def add_blank_args[] = { + { "n", AT_INT | AT_POSITIONAL }, + PAPER_ARGS, + { NULL, 0 } +}; + /*** Command table ***/ template cmd_exec *ctor(cmd *c) { return new T(c); } @@ -764,12 +802,13 @@ const cmd_def cmd_table[] = { { "select", no_args, 1, &ctor }, { "apply", no_args, 1, &ctor }, { "modulo", modulo_args, 1, &ctor }, - { "draw_bbox",no_args, 0, &ctor }, + { "draw-bbox",no_args, 0, &ctor }, { "merge", no_args, 0, &ctor }, { "paper", paper_args, 0, &ctor }, { "scaleto", scaleto_args, 0, &ctor }, { "fit", fit_args, 0, &ctor }, { "expand", expand_args, 0, &ctor }, { "margins", margins_args, 0, &ctor }, + { "add-blank",add_blank_args, 0, &ctor }, { NULL, NULL, 0, NULL } }; diff --git a/parse.cc b/parse.cc index 5158eeb..b48b2f4 100644 --- a/parse.cc +++ b/parse.cc @@ -78,7 +78,8 @@ static token_type get_next_token() while (*in_pos >= 'A' && *in_pos <= 'Z' || *in_pos >= 'a' && *in_pos <= 'z' || *in_pos >= '0' && *in_pos <= '9' || - *in_pos == '_') + *in_pos == '_' || + *in_pos == '-') token += *in_pos++; return TOK_IDENT; }