Merge master

This commit is contained in:
Pieter Vander Vennet 2022-04-01 12:56:51 +02:00
commit 796ee40f3b
169 changed files with 35962 additions and 464 deletions

View file

@ -238,4 +238,8 @@ export class And extends TagsFilter {
return new And(newAnds)
}
isNegative(): boolean {
return !this.and.some(t => !t.isNegative());
}
}

View file

@ -59,4 +59,8 @@ export default class ComparingTag implements TagsFilter {
optimize(): TagsFilter | boolean {
return this;
}
isNegative(): boolean {
return true;
}
}

View file

@ -167,6 +167,10 @@ export class Or extends TagsFilter {
return new Or(newOrs)
}
isNegative(): boolean {
return this.or.some(t => t.isNegative());
}
}

View file

@ -197,4 +197,8 @@ export class RegexTag extends TagsFilter {
optimize(): TagsFilter | boolean {
return this;
}
isNegative(): boolean {
return this.invert;
}
}

View file

@ -89,4 +89,8 @@ export default class SubstitutingTag implements TagsFilter {
optimize(): TagsFilter | boolean {
return this;
}
isNegative(): boolean {
return false;
}
}

View file

@ -120,4 +120,8 @@ export class Tag extends TagsFilter {
optimize(): TagsFilter | boolean {
return this;
}
isNegative(): boolean {
return false;
}
}

View file

@ -172,7 +172,7 @@ export class TagUtils {
*
* TagUtils.Tag("key=value") // => new Tag("key", "value")
* TagUtils.Tag("key=") // => new Tag("key", "")
* TagUtils.Tag("key!=") // => new RegexTag("key", "^..*$", true)
* TagUtils.Tag("key!=") // => new RegexTag("key", "^..*$")
* TagUtils.Tag("key!=value") // => new RegexTag("key", /^value$/, true)
* TagUtils.Tag("vending~.*bicycle_tube.*") // => new RegexTag("vending", /^.*bicycle_tube.*$/)
* TagUtils.Tag("x!~y") // => new RegexTag("x", /^y$/, true)
@ -298,6 +298,7 @@ export class TagUtils {
}
if (split[1] === "") {
split[1] = "..*"
return new RegexTag(split[0], /^..*$/)
}
return new RegexTag(
split[0],

View file

@ -33,5 +33,21 @@ export abstract class TagsFilter {
*/
abstract optimize(): TagsFilter | boolean;
/**
* Returns 'true' if the tagsfilter might select all features (i.e. the filter will return everything from OSM, except a few entries).
*
* A typical negative tagsfilter is 'key!=value'
*
* import {RegexTag} from "./RegexTag";
* import {Tag} from "./Tag";
* import {And} from "./And";
* import {Or} from "./Or";
*
* new Tag("key","value").isNegative() // => false
* new And([new RegexTag("key","value", true)]).isNegative() // => true
* new Or([new RegexTag("key","value", true), new Tag("x","y")]).isNegative() // => true
* new And([new RegexTag("key","value", true), new Tag("x","y")]).isNegative() // => false
*/
abstract isNegative(): boolean
}