mapshaper 0.6.62 → 0.6.63

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/mapshaper.js CHANGED
@@ -13419,7 +13419,7 @@
13419
13419
 
13420
13420
  // Accepts a single value or a list of four values. List order is l,b,t,r
13421
13421
  function convertFourSides(opt, crs, bounds) {
13422
- var arr = opt.split(',');
13422
+ var arr = opt.includes(',') ? opt.split(',') : opt.split(' ');
13423
13423
  if (arr.length == 1) {
13424
13424
  arr = [arr[0], arr[0], arr[0], arr[0]];
13425
13425
  } else if (arr.length != 4) {
@@ -39328,58 +39328,74 @@ ${svg}
39328
39328
  print(str);
39329
39329
  };
39330
39330
 
39331
- function resetControlFlow(job) {
39332
- job.control = null;
39333
- }
39334
-
39335
39331
  function stopJob(job) {
39336
- getState(job).stopped = true;
39332
+ job.stopped = true;
39337
39333
  }
39338
39334
 
39339
39335
  function jobIsStopped(job) {
39340
- return getState(job).stopped === true;
39336
+ return job.stopped === true;
39341
39337
  }
39342
39338
 
39343
39339
  function inControlBlock(job) {
39344
- return !!getState(job).inControlBlock;
39340
+ return getStack(job).length > 0;
39341
+ }
39342
+
39343
+ function enterBlock(job) {
39344
+ var stack = getStack(job);
39345
+ // skip over a block if it is inside an inactive branch
39346
+ stack.push({
39347
+ active: false,
39348
+ complete: !inActiveBranch(job)
39349
+ });
39350
+ }
39351
+
39352
+ function leaveBlock(job) {
39353
+ var stack = getStack(job);
39354
+ stack.pop();
39345
39355
  }
39346
39356
 
39347
39357
  function enterActiveBranch(job) {
39348
- var state = getState(job);
39349
- state.inControlBlock = true;
39350
- state.active = true;
39351
- state.complete = true;
39358
+ var block = getCurrentBlock(job);
39359
+ block.active = true;
39360
+ block.complete = true;
39352
39361
  }
39353
39362
 
39354
39363
  function enterInactiveBranch(job) {
39355
- var state = getState(job);
39356
- state.inControlBlock = true;
39357
- state.active = false;
39364
+ var block = getCurrentBlock(job);
39365
+ block.active = false;
39366
+ }
39367
+
39368
+ function blockIsComplete(job) {
39369
+ var block = getCurrentBlock(job);
39370
+ return block.complete;
39358
39371
  }
39359
39372
 
39360
- function blockWasActive(job) {
39361
- return !!getState(job).complete;
39373
+ function getCurrentBlock(job) {
39374
+ var stack = getStack(job);
39375
+ return stack[stack.length-1];
39362
39376
  }
39363
39377
 
39378
+ // A branch is considered to be active if it and all its parents are active
39379
+ // (Main branch is considered to be active)
39364
39380
  function inActiveBranch(job) {
39365
- return !!getState(job).active;
39381
+ var stack = getStack(job);
39382
+ return stack.length === 0 || stack.every(block => block.active);
39366
39383
  }
39367
39384
 
39368
- function getState(job) {
39369
- return job.control || (job.control = {});
39385
+ function getStack(job) {
39386
+ job.control = job.control || {stack: []};
39387
+ return job.control.stack;
39370
39388
  }
39371
39389
 
39372
39390
  function skipCommand(cmdName, job) {
39373
39391
  // allow all control commands to run
39374
39392
  if (jobIsStopped(job)) return true;
39375
39393
  if (isControlFlowCommand(cmdName)) return false;
39376
- return inControlBlock(job) && !inActiveBranch(job);
39394
+ return !inActiveBranch(job);
39377
39395
  }
39378
39396
 
39379
39397
  cmd.if = function(job, opts) {
39380
- if (inControlBlock(job)) {
39381
- stop('Nested -if commands are not supported.');
39382
- }
39398
+ enterBlock(job);
39383
39399
  evaluateIf(job, opts);
39384
39400
  };
39385
39401
 
@@ -39394,7 +39410,7 @@ ${svg}
39394
39410
  if (!inControlBlock(job)) {
39395
39411
  stop('-else command must be preceded by an -if command.');
39396
39412
  }
39397
- if (blockWasActive(job)) {
39413
+ if (blockIsComplete(job)) {
39398
39414
  enterInactiveBranch(job);
39399
39415
  } else {
39400
39416
  enterActiveBranch(job);
@@ -39405,7 +39421,7 @@ ${svg}
39405
39421
  if (!inControlBlock(job)) {
39406
39422
  stop('-endif command must be preceded by an -if command.');
39407
39423
  }
39408
- resetControlFlow(job);
39424
+ leaveBlock(job);
39409
39425
  };
39410
39426
 
39411
39427
  function isControlFlowCommand(cmd) {
@@ -39413,21 +39429,14 @@ ${svg}
39413
39429
  }
39414
39430
 
39415
39431
  function test(catalog, opts) {
39416
- // var targ = getTargetLayer(catalog, opts);
39417
39432
  if (opts.expression) {
39418
39433
  return compileIfCommandExpression(opts.expression, catalog, opts)();
39419
39434
  }
39420
- // if (opts.empty) {
39421
- // return layerIsEmpty(targ.layer);
39422
- // }
39423
- // if (opts.not_empty) {
39424
- // return !layerIsEmpty(targ.layer);
39425
- // }
39426
39435
  return true;
39427
39436
  }
39428
39437
 
39429
39438
  function evaluateIf(job, opts) {
39430
- if (!blockWasActive(job) && test(job.catalog, opts)) {
39439
+ if (!blockIsComplete(job) && test(job.catalog, opts)) {
39431
39440
  enterActiveBranch(job);
39432
39441
  } else {
39433
39442
  enterInactiveBranch(job);
@@ -42113,7 +42122,12 @@ ${svg}
42113
42122
  function applyReplacements(template, replacements) {
42114
42123
  var parts = parseTemplateParts(template);
42115
42124
  return parts.reduce(function(memo, s, i) {
42116
- return i % 2 == 1 ? memo + (replacements.shift() || '') : memo + s;
42125
+ if (i % 2 == 1) {
42126
+ memo += replacements.length ? replacements.shift() : '';
42127
+ } else {
42128
+ memo += s;
42129
+ }
42130
+ return memo;
42117
42131
  }, '');
42118
42132
  }
42119
42133
 
@@ -44978,7 +44992,7 @@ ${svg}
44978
44992
  });
44979
44993
  }
44980
44994
 
44981
- var version = "0.6.62";
44995
+ var version = "0.6.63";
44982
44996
 
44983
44997
  // Parse command line args into commands and run them
44984
44998
  // Function takes an optional Node-style callback. A Promise is returned if no callback is given.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mapshaper",
3
- "version": "0.6.62",
3
+ "version": "0.6.63",
4
4
  "description": "A tool for editing vector datasets for mapping and GIS.",
5
5
  "keywords": [
6
6
  "shapefile",
package/www/mapshaper.js CHANGED
@@ -13419,7 +13419,7 @@
13419
13419
 
13420
13420
  // Accepts a single value or a list of four values. List order is l,b,t,r
13421
13421
  function convertFourSides(opt, crs, bounds) {
13422
- var arr = opt.split(',');
13422
+ var arr = opt.includes(',') ? opt.split(',') : opt.split(' ');
13423
13423
  if (arr.length == 1) {
13424
13424
  arr = [arr[0], arr[0], arr[0], arr[0]];
13425
13425
  } else if (arr.length != 4) {
@@ -39328,58 +39328,74 @@ ${svg}
39328
39328
  print(str);
39329
39329
  };
39330
39330
 
39331
- function resetControlFlow(job) {
39332
- job.control = null;
39333
- }
39334
-
39335
39331
  function stopJob(job) {
39336
- getState(job).stopped = true;
39332
+ job.stopped = true;
39337
39333
  }
39338
39334
 
39339
39335
  function jobIsStopped(job) {
39340
- return getState(job).stopped === true;
39336
+ return job.stopped === true;
39341
39337
  }
39342
39338
 
39343
39339
  function inControlBlock(job) {
39344
- return !!getState(job).inControlBlock;
39340
+ return getStack(job).length > 0;
39341
+ }
39342
+
39343
+ function enterBlock(job) {
39344
+ var stack = getStack(job);
39345
+ // skip over a block if it is inside an inactive branch
39346
+ stack.push({
39347
+ active: false,
39348
+ complete: !inActiveBranch(job)
39349
+ });
39350
+ }
39351
+
39352
+ function leaveBlock(job) {
39353
+ var stack = getStack(job);
39354
+ stack.pop();
39345
39355
  }
39346
39356
 
39347
39357
  function enterActiveBranch(job) {
39348
- var state = getState(job);
39349
- state.inControlBlock = true;
39350
- state.active = true;
39351
- state.complete = true;
39358
+ var block = getCurrentBlock(job);
39359
+ block.active = true;
39360
+ block.complete = true;
39352
39361
  }
39353
39362
 
39354
39363
  function enterInactiveBranch(job) {
39355
- var state = getState(job);
39356
- state.inControlBlock = true;
39357
- state.active = false;
39364
+ var block = getCurrentBlock(job);
39365
+ block.active = false;
39366
+ }
39367
+
39368
+ function blockIsComplete(job) {
39369
+ var block = getCurrentBlock(job);
39370
+ return block.complete;
39358
39371
  }
39359
39372
 
39360
- function blockWasActive(job) {
39361
- return !!getState(job).complete;
39373
+ function getCurrentBlock(job) {
39374
+ var stack = getStack(job);
39375
+ return stack[stack.length-1];
39362
39376
  }
39363
39377
 
39378
+ // A branch is considered to be active if it and all its parents are active
39379
+ // (Main branch is considered to be active)
39364
39380
  function inActiveBranch(job) {
39365
- return !!getState(job).active;
39381
+ var stack = getStack(job);
39382
+ return stack.length === 0 || stack.every(block => block.active);
39366
39383
  }
39367
39384
 
39368
- function getState(job) {
39369
- return job.control || (job.control = {});
39385
+ function getStack(job) {
39386
+ job.control = job.control || {stack: []};
39387
+ return job.control.stack;
39370
39388
  }
39371
39389
 
39372
39390
  function skipCommand(cmdName, job) {
39373
39391
  // allow all control commands to run
39374
39392
  if (jobIsStopped(job)) return true;
39375
39393
  if (isControlFlowCommand(cmdName)) return false;
39376
- return inControlBlock(job) && !inActiveBranch(job);
39394
+ return !inActiveBranch(job);
39377
39395
  }
39378
39396
 
39379
39397
  cmd.if = function(job, opts) {
39380
- if (inControlBlock(job)) {
39381
- stop('Nested -if commands are not supported.');
39382
- }
39398
+ enterBlock(job);
39383
39399
  evaluateIf(job, opts);
39384
39400
  };
39385
39401
 
@@ -39394,7 +39410,7 @@ ${svg}
39394
39410
  if (!inControlBlock(job)) {
39395
39411
  stop('-else command must be preceded by an -if command.');
39396
39412
  }
39397
- if (blockWasActive(job)) {
39413
+ if (blockIsComplete(job)) {
39398
39414
  enterInactiveBranch(job);
39399
39415
  } else {
39400
39416
  enterActiveBranch(job);
@@ -39405,7 +39421,7 @@ ${svg}
39405
39421
  if (!inControlBlock(job)) {
39406
39422
  stop('-endif command must be preceded by an -if command.');
39407
39423
  }
39408
- resetControlFlow(job);
39424
+ leaveBlock(job);
39409
39425
  };
39410
39426
 
39411
39427
  function isControlFlowCommand(cmd) {
@@ -39413,21 +39429,14 @@ ${svg}
39413
39429
  }
39414
39430
 
39415
39431
  function test(catalog, opts) {
39416
- // var targ = getTargetLayer(catalog, opts);
39417
39432
  if (opts.expression) {
39418
39433
  return compileIfCommandExpression(opts.expression, catalog, opts)();
39419
39434
  }
39420
- // if (opts.empty) {
39421
- // return layerIsEmpty(targ.layer);
39422
- // }
39423
- // if (opts.not_empty) {
39424
- // return !layerIsEmpty(targ.layer);
39425
- // }
39426
39435
  return true;
39427
39436
  }
39428
39437
 
39429
39438
  function evaluateIf(job, opts) {
39430
- if (!blockWasActive(job) && test(job.catalog, opts)) {
39439
+ if (!blockIsComplete(job) && test(job.catalog, opts)) {
39431
39440
  enterActiveBranch(job);
39432
39441
  } else {
39433
39442
  enterInactiveBranch(job);
@@ -42113,7 +42122,12 @@ ${svg}
42113
42122
  function applyReplacements(template, replacements) {
42114
42123
  var parts = parseTemplateParts(template);
42115
42124
  return parts.reduce(function(memo, s, i) {
42116
- return i % 2 == 1 ? memo + (replacements.shift() || '') : memo + s;
42125
+ if (i % 2 == 1) {
42126
+ memo += replacements.length ? replacements.shift() : '';
42127
+ } else {
42128
+ memo += s;
42129
+ }
42130
+ return memo;
42117
42131
  }, '');
42118
42132
  }
42119
42133
 
@@ -44978,7 +44992,7 @@ ${svg}
44978
44992
  });
44979
44993
  }
44980
44994
 
44981
- var version = "0.6.62";
44995
+ var version = "0.6.63";
44982
44996
 
44983
44997
  // Parse command line args into commands and run them
44984
44998
  // Function takes an optional Node-style callback. A Promise is returned if no callback is given.